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

来源:1-8 【经验分享群讨论】如何快速涨薪,在中小厂成为Leader?

Thorn4874674

2021-04-09

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

Mysql的两种不同读写方式

  • 快照读

    • select … from …

  • 当前读

    • select … from … for update

    • select … from … in share mode

    • update …

    • delete …

如何解决幻读的

1. 快照读

  • 多版本并发控制(MVCC)

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

2. 当前读

  • next - key 锁

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

1回答

求老仙

2021-04-11

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

1
0

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程