MySQL事务以及隔离级别(2)

  T1 insert了一条数据,T2此时看不到,等T1 commit了以后,T2还是看不到。等T2事务进行提交了以后,在进行select,发觉,卧槽,数据怎么多了一条出来,感觉出现了幻觉,即“幻读”;

MVCC机制:

多版本并发控制(Multiversion Concurrency Control)。MySQL默认隔离级别为Repeatable Read(可重读)。那么MySQL如何解决幻读的。

就是利用MVCC机制。

什么是多版本并发控制呢 ?其实就是在每一行记录的后面增加两个隐藏列,记录创建版本号和删除版本号,而每一个事务在启动的时候,都有一个唯一的递增的版本号。

只有read-committed和 repeatable-read 两种事务隔离级别才能使用MVCC

read-uncommited由于是读到未提交的,所以不存在版本的问题

而serializable 则会对所有读取的行加锁。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/146973131700dfe45f5de049569f21f6.html