美文网首页
InnoDB的MVCC如何解决幻读

InnoDB的MVCC如何解决幻读

作者: join_a922 | 来源:发表于2018-12-03 13:36 被阅读22次

InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,但是不能解决幻读问题。

什么是幻读?

事务A读取了一个范围内的数据,此时事务B在该范围内插入了一条数据,并立马提交了事务,此时事务A再次读取这个范围的数据时,发现多了一条,就好像幻觉一样。

什么是MVCC?

多版本并发控制。InnoDB为每行记录添加了一个版本号(系统版本号),每当修改数据时,版本号加一。

在读取事务开始时,系统会给事务一个当前版本号,事务会读取版本号<=当前版本号的数据,这时就算另一个事务插入一个数据,并立马提交,新插入这条数据的版本号会比读取事务的版本号高,因此读取事务读的数据还是不会变。

例如:

此时books表中有5条数据,版本号为1

事务A,系统版本号2:select * from books;因为1<=2所以此时会读取5条数据。

事务B,系统版本号3:insert into books ...,插入一条数据,新插入的数据版本号为3,而其他的数据的版本号仍然是2,插入完成之后commit,事务结束。

事务A,系统版本号2:再次select * from books;只能读取<=2的数据,事务B新插入的那条数据版本号为3,因此读不出来,解决了幻读的问题。

相关文章

  • innodb中幻读与mvcc和间隙锁分析

    innodb中幻读的解决到底是依赖间隙锁还是mvcc产生了分歧。(事务隔离级别rr)面试官大大认为innodb就是...

  • MVCC

    MVCC(多版本控制)解决幻读: 当插入的是一条新数据时,记录上对应的回滚段指针为NULL InnoDB的MVCC...

  • InnoDB的MVCC如何解决幻读

    InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,但是不能解决幻读问题。 什么是幻读? 事务...

  • MVCC 能解决幻读吗?

    昨天面试当中一个小伙认为MVCC可以解决RR中的幻读问题, 先说结论, MVCC不能解决幻读, 但是如果本事务当中...

  • InnoDB解决幻读的方案--LBCC&MVCC

    最近要在公司内做一次技术分享,思来想去不知道该分享些什么,最后在朋友的提示下,准备分享一下MySQL的InnoDB...

  • InnoDB解决幻读的方案--LBCC&MVCC

    感谢作者,原文链接:https://mp.weixin.qq.com/s/4ncvGW7klk8pDLE5o4jh...

  • 程序员之MySQL

    1.MySQL解决幻读问题 MySQL InnoDB通过版本号解决事务的幻读问题a.select情况:InnoD...

  • 系统原理-MVCC

    在SQL标准中,RR是无法避免幻读问题的,但是InnoDB实现的RR避免了幻读问题。RR解决脏读、不可重复读、幻读...

  • MySQL/InnoDB 的事务隔离级别和锁

    事务的隔离级别 读分为快照读和当前读。用 MVCC 可解决快照读的脏读、幻读问题,不需要上锁。 Read Unco...

  • 2021-04-02 Next-Key Lock 解决幻读

    上文中已经总结了Mysql是如何利用MVCC实现四个隔离级别的,但是对于幻读问题,MVCC是无能为力的。在RR隔离...

网友评论

      本文标题:InnoDB的MVCC如何解决幻读

      本文链接:https://www.haomeiwen.com/subject/kilycqtx.html