Mysql的MVCC与幻读

2023-03-09,

以下特殊情况在可重复读时会产生幻读:

1.a事务先select,b事务insert确实会加一个gap锁,但是如果b事务commit,这个gap锁就会释放(释放后a事务可以随意操作),

2.a事务再select出来的结果在MVCC下还和第一次select一样,

3.接着a事务不加条件地update,这个update会作用在所有行上(包括b事务新加的),

4.a事务再次select就会出现b事务中的新行,并且这个新行已经被update修改了.

即如果表中没有行的增减,只是修改不会发生幻读,用undolog的快照读版本号就能解决。

如果有增减行的情况可能发生幻读,必须要加行锁和间隙锁(select for update)

增减行一定会发生幻插(即插入时发现已有一条不存在的行)

Mysql的MVCC与幻读的相关教程结束。

《Mysql的MVCC与幻读.doc》

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