面试被问:Mysql的InnoDB下RR是如何解决幻读问题的
- IT业界
- 2025-08-19 06:06:01

这个问题应该分几方面来答 第一方面:什么是幻读
Mysql事务在并发下会产生脏读、不可重复读、幻读问题。
赃读:一个事务可以读到另一个事务还没有提交的数据;
不可重复读:一个事务可以读到另一个事务修改并提交的数据;
幻读:一个事务两次相同的范围查找,之间另一个事务对这个范围insert了一条数据并提交,导致这两次事务查找的结果不一致。
第二方面:事务的隔离级别读未提交:简称RU,可以读到其他事务还没有提交的数据。所以会有脏读、不可重复读、幻读问题。
读已提交:简称RC,解决了赃读的问题,但是还是有不可重复读、幻读问题。
可重复读:解决了不可重复读问题,当前读还解决了幻读问题。
串行化:事务串行执行,效率低。
第三方面:RR是如何解决的RR下的当前读(for update)会给范围查找的范围区间加上间隙锁或者临键锁,在这个区间加了间隙锁后就会阻塞其他事务对这个区间的数据插入,就解决了幻读问题
总结:RR解决幻读是通过当前读会加间隙锁,这样效率肯定会降低,如果我们的业务可以接受幻读和不可重复读的话,可以把隔离级别设置为RC,RC的当前读是不会加间隙锁的,RC只有记录锁,可以一定程度上提高我们程序的性能
面试被问:Mysql的InnoDB下RR是如何解决幻读问题的由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“面试被问:Mysql的InnoDB下RR是如何解决幻读问题的”