Mysql中Mvcc的实现是如何的?RR级别下如何保证读取不到事务提交的记录?

按照高性能Mysql中的说法,mysql中每行记录会保存一个创建时的事务版本号,和一个删除时候的事务版本号,并且查找的时候查找创建版本号早于当前事务版本号的记录,并且删除版本号为空,或者删除版本号大于当前事务版本号的记录。

那么,这种情况下是如何显示的?
事务A 事务版本号1

begin            
     select                    事务B    事务版本号2
                                  begin
        insert                        
                                       select                          
                    

是否事务B可以获取到事务A的insert呢?按照高性能mysql中的说法,insert的时候,新插入的行保存的是当前事务版本号,那么insert就是的版本号就是1,select查询小于2的事务版本号,应该是能够查询出来的。但是这样的话,多版本控制的获取的不照样存在幻读么?如何隔离幻读?是否是MVCC控制不了的呢?还是说有其它的机制在控制,保证RR模式下innodb保证幻读的不发生?

阅读 2.1k
2 个回答

RR隔离级别也不能完全保证避免幻读

推荐问题
宣传栏