事务
事务管理是原子操作,是加锁的,并发执行,如果隔离不合理,可能会出现脏读、不可重复读、幻读(更新3次,结果却更新了4次)
四个隔离级别 可序列化等
https://developer.aliyun.com/article/743691
set autocommit=0开启事务
commit roll back结束事务
隔离级别:多个用户之间,你是否有影响
读未提取(READ UNCOMMITTED)
允许的用户最多
读到别人未提交的数据读已提取(READ COMMITTED)
允许的用户次之读到别人已提交的数据
可重复读(REPEATABLE READ)
允许的用户再次之保证不会出现不可重复读
可串行化(SERLALZABLE)
允许的用户最少保证不会出现幻读
事务并发可能出现的问题:
- 脏读(Dirty Read)
- 一个事务读到了另一个未提交事务修改过的数据
- 就是两个用户都先后开始了事务操作,其中一个人进行操作的时候,读取到另一个人修改后的操作,而另一个人的修改操作还未完成,这就叫脏读
- 如果允许脏读,就要把隔离级别设到最低,READ_UNCOMMITTED
不可重复读(Non-Repeatable Read)
- 一个事务只能读到另一个已经提交的事务并修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值。(不可重复读在读未提取和读已提取隔离级别都可能会出现)
- 在READ_COMMITTED中,可以读到别人提交的事务,进行同样的操作后,读取后的数据不一样- 幻读
- 在可重复读级别下,
- 进行事务操作,更新操作看不到,但是可以看到新增的插入操作结果
- 解决方法:用最高的隔离级别:可串行化
四种隔离级别比较