当前位置:首页 > 编程笔记 > 正文
已解决

面试被问: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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!