面试被问:Mysql的InnoDB下RR是如何解决幻读问题的

这个问题应该分几方面来答
第一方面:什么是幻读

        Mysql事务在并发下会产生脏读、不可重复读、幻读问题。

赃读:一个事务可以读到另一个事务还没有提交的数据;

不可重复读:一个事务可以读到另一个事务修改并提交的数据;

幻读:一个事务两次相同的范围查找,之间另一个事务对这个范围insert了一条数据并提交,导致这两次事务查找的结果不一致。

第二方面:事务的隔离级别

读未提交:简称RU,可以读到其他事务还没有提交的数据。所以会有脏读、不可重复读、幻读问题。

读已提交:简称RC,解决了赃读的问题,但是还是有不可重复读、幻读问题。

可重复读:解决了不可重复读问题,当前读还解决了幻读问题。

串行化:事务串行执行,效率低。

第三方面:RR是如何解决的

        RR下的当前读(for update)会给范围查找的范围区间加上间隙锁或者临键锁,在这个区间加了间隙锁后就会阻塞其他事务对这个区间的数据插入,就解决了幻读问题

总结:

        RR解决幻读是通过当前读会加间隙锁,这样效率肯定会降低,如果我们的业务可以接受幻读和不可重复读的话,可以把隔离级别设置为RC,RC的当前读是不会加间隙锁的,RC只有记录锁,可以一定程度上提高我们程序的性能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w7486

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值