解决幻读问题
- 快照读:通过MVCC来进行控制的 , 不用加锁 。按照MVCC中规定的“语法”进行增删改查等操作 , 以避免幻读 。
- 当前读:通过next-key锁(行锁+gap锁)来解决问题的 。
- 在RR级别下的某个事务的对某条记录的第一次快照读会创建一个快照及Read View , 将当前系统活跃的其他事务记录起来 , 此后在调用快照读的时候 , 还是使用的是同一个Read View , 所以只要当前事务在其他事务提交更新之前使用过快照读 , 那么之后的快照读使用的都是同一个Read View , 所以对之后的修改不可见;
- 即RR级别下 , 快照读生成Read View时 , Read View会记录此时所有其他活动事务的快照 , 这些事务的修改对于当前事务都是不可见的 。而早于Read View创建的事务所做的修改均是可见
- 而在RC级别下的 , 事务中 , 每次快照读都会新生成一个快照和Read View, 这就是我们在RC级别下的事务中可以看到别的事务提交的更新的原因
链接:https://juejin.im/post/6871046354018238472
来源:掘金
【全网最全一篇数据库MVCC详解,不全你打我】
推荐阅读
- 万字干货,Python语法大合集,一篇文章带你入门
- Java各个时间类总结归纳,最全一篇
- 含代码实现 最全解密微信红包随机算法
- IP 通俗易懂网络协议
- 一篇文章教会你利用createjs实现界面效果
- 一篇文章教会你创建vue项目和用vue.js实现数据增删改查
- 一篇文章带你用jquery mobile设计颜色拾取器
- 零散的MySQL基础总是记不住?看这一篇如何拯救你
- 什么是Docker?看这一篇干货文章就够了
- 一篇文章搞懂热修复类加载方案原理