请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于Innodb如何在RR级别下解决幻读的理解

老师我理解的是应该从两个方向来考虑这个问题

Mysql的两种不同读写方式

  • 快照读

    • select … from …

  • 当前读

    • select … from … for update

    • select … from … in share mode

    • update …

    • delete …

如何解决幻读的

1. 快照读

  • 多版本并发控制(MVCC)

      通过对数据行和事务都增加版本副本,事务每次都会从创建版本小于当前事务版本的数据版本取数据
      无锁操作

2. 当前读

  • next - key 锁

    行锁
    间隙锁 (insert操作)
    
    记录锁是加在索引上的锁,间隙锁是加在索引之间的。
    本质上就是通过加锁来使得事务串行化

正在回答

1回答

同学,虽然网上很多材料讲到间隙锁的目标是为了解决幻读。但是我自己的看法,mvcc已经解决了幻读问题,for update语句的目的是锁定更新。如果没有mvcc9 ,那么for update语句解决的依然是锁,或者消除了幻读。但是总体来说,从原理分析mvcc性能更好。

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信