已解决
面试被问:Mysql的InnoDB下RR是如何解决幻读问题的
来自网友在路上 159859提问 提问时间:2023-09-20 09:24:18阅读次数: 59
最佳答案 问答题库598位专家为你答疑解惑
这个问题应该分几方面来答
第一方面:什么是幻读
Mysql事务在并发下会产生脏读、不可重复读、幻读问题。
赃读:一个事务可以读到另一个事务还没有提交的数据;
不可重复读:一个事务可以读到另一个事务修改并提交的数据;
幻读:一个事务两次相同的范围查找,之间另一个事务对这个范围insert了一条数据并提交,导致这两次事务查找的结果不一致。
第二方面:事务的隔离级别
读未提交:简称RU,可以读到其他事务还没有提交的数据。所以会有脏读、不可重复读、幻读问题。
读已提交:简称RC,解决了赃读的问题,但是还是有不可重复读、幻读问题。
可重复读:解决了不可重复读问题,当前读还解决了幻读问题。
串行化:事务串行执行,效率低。
第三方面:RR是如何解决的
RR下的当前读(for update)会给范围查找的范围区间加上间隙锁或者临键锁,在这个区间加了间隙锁后就会阻塞其他事务对这个区间的数据插入,就解决了幻读问题
总结:
RR解决幻读是通过当前读会加间隙锁,这样效率肯定会降低,如果我们的业务可以接受幻读和不可重复读的话,可以把隔离级别设置为RC,RC的当前读是不会加间隙锁的,RC只有记录锁,可以一定程度上提高我们程序的性能
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"面试被问:Mysql的InnoDB下RR是如何解决幻读问题的":http://eshow365.cn/6-9912-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Cesium 生成点位坐标
- 下一篇: C#使用DirectX SDK 加载.x三维模型