脏读
脏读是指事务读取到了其它事务尚未提交的数据。
不可重复读
不可重复读是指并发更新时,另一个事务前后查询相同数据时数据不一致问题。
幻读
幻读是指在执行并发新增、删除这种会使数据量发生变化的操作时,另一个事务前后查询相同数据时不符合预期。
事务隔离级别
隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 |
---|---|---|---|---|
READ UNCOMMITTED | 是 | 是 | 是 | 否 |
READ COMMITTED | 否 | 是 | 是 | 否 |
REPEATABLE READ | 否 | 否 | 是(InnoDB引擎除外) | 否 |
SERIALIZABLE | 否 | 否 | 否 | 是 |
MySQL提供了4种隔离级别来解决以上问题,如图所示,从上至下隔离级别逐级变高,同时程序并发处理能力也就越来越低。
- 读未提交(READ UNCOMMITTED):可以读取到其它事务尚未提交的数据,会产生脏读、不可重复读、幻读问题。
- 读已提交(READ COMMITTED):只能读取到其它事务已提交的数据,不会产生脏读,但可能产生不可重复读、幻读。
- 可重复读(REPEATABLE READ):MySQL默认的隔离级别,不会产生脏读、幻读问题,若存储引擎非innoDB的话则存在幻读可能性。
- 可串行读(SERIALIZABLE):通过加入读锁方式,解决脏读、不可重复读、幻读问题,同时也就意味着效率大打折扣。
如何设置隔离级别
MySQL默认隔离级别为可重复读(REPEATABLE READ)
MySQL5.1后,默认存储引擎为InnoDB,因此默认也能解决幻读问题。
查看当前的隔离级别
show variables like 'transaction_isolation';
设置当前会话事务隔离级别为READ UNCOMMITTED
(读未提交)
set session transaction isolation level READ UNCOMMITTED;
标签:隔离,幻读,READ,脏读,MySQL,级别,重复
From: https://www.cnblogs.com/7moon/p/16769736.html