【mysql】- 事务隔离级别和MVCC篇

2022-12-11,,,,


概念

术语

脏写( Dirty Write ): 如果一个事务修改了另一个未提交事务修改过的数据,那就意味着发了脏写
脏读( Dirty Read ) : 如果一个事务读到了另一个未提交事务修改过的数据,那就意味着发了脏读
不可重复读(Non-Repeatable Read): 如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那就意味着发了不可重复读
幻读(Phantom): 如果一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来,那就意味着发了幻读

隔离级别

READ UNCOMMITTED :未提交读。
READ COMMITTED :已提交读。
REPEATABLE READ :可重复读。
SERIALIZABLE :可串行化。

对应隔离级别问题

READ UNCOMMITTED 隔离级别下,可能发生脏读不可重复读幻读问题
READ COMMITTED 隔离级别下,可能发生不可重复读幻读问题,但是不可以发生脏读问题
REPEATABLE READ 隔离级别下,可能发生幻读问题,但是不会发生脏读不可重复读的问题
SERIALIZABLE 隔离级别下,各种问题都不可以发生。

MySQL的默认隔离级别为REPEATABLE READ

MVCC(多版本并发控制)

在使用READ COMMITTDREPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程,这样使可以使不同事务的读-写写-读操作并发执行,从而提升系统性能
READCOMMITTDREPEATABLE READ这两个隔离级别的一个很大不同就是:生成ReadView的时机不同,READ COMMITTD在每一次进行普通SELECT操作前都会生成一个ReadViewREPEATABLE READ只在第一次进行普通SELECT操作前生成一个ReadView,之后的查询操作都重复使用这个ReadView就好了

mysql】- 事务隔离级别和MVCC篇的相关教程结束。

《【mysql】- 事务隔离级别和MVCC篇.doc》

下载本文的Word格式文档,以方便收藏与打印。