记录事务的隔离级别以及对于脏读,不可重复读和幻读的理解。
各事务级别能够解决的问题(√:可能出现 ×:不会出现)
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
Read uncommitted :允许B事务读取A事务中未提交的数据,隔离级别最低。
Read committed :不允许B事务读取A事务中未提交的数据,但是当AB事务交叉进行时,可能会导致A事务两次读取的数据不一致,原因为在A事务两次读取之间,B事务对某个数据进行了修改并且提交成功,这是大多数数据库默认的隔离级别(除MySQL)。
Repeatable read :当A事务开启时,不允许其他事务对A事务读取的数据进行修改(行级锁),避免了不可重复读,但是当A事务读取整张表的内容时,B事务可以进行表数据的插入或者删除,导致A发现所读的表数据不同(例如某张表的COUNT(*)),就像出现了幻读。这个是MySQL默认的隔离级别。
Serializable :隔离级别最高,只允许事务以串行的方式进行,通常不建议采取该隔离级别,效率太低!
参考博客:https://blog.youkuaiyun.com/jiesa/article/details/51317164