MySQL解决幻读问题

今天复习到了MySQL章节的事务这里的时候,看到了一篇文章《MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC?》MySQL 默认隔离级别是RR,为什么阿里等大厂会改成RC? - 知乎 (zhihu.com)然后点进去一看,发现上面写了RR是可以解决幻读问题的,突然就发现和我刚刚看到的黑马的MySQL只有串行化才能解决幻读问题有了冲突,然后就激发起了我的兴趣,就开始疯狂的找相关的文章。看了大概七八份博客和文章之后我来总结一下。大概就是说RR可以解决幻读的问题。我个人理解大多数的说法是:因为在RR隔离级别下,正常的RR是无法解决幻读的,但是innoDB还用了间隙锁的机制,使用间隙锁就可以锁住数据之间的间隙,数据库也就无法进行insert和delete的操作,从而解决了幻读的问题。参考文章:10个人有9个答错,另外1个只对一半:数据库的锁,到底锁的是什么? (qq.com)。但是也同时存着一种说法即:MySQL使用innoDB独有的MVCC版本控制的机制来解决幻读问题的,因为RR模式下,每当开启事务的时候会生成一个readview(快照),,每次读取readview来保证数据的可见性即可,不需要依赖锁机制来保证。参考文章:从一个问题出发,搞懂MySQL MVCC、readview、快照读和undo log是什么鬼-阿里云开发者社区 (aliyun.com)


我更加偏信第一个使用间隙锁来解决幻读,因为不仅是因为说的人更多,更可能是因为我更好理解吧。。。

不知道有没有大佬可以指点一下RR是怎么解决幻读问题的。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
Nafiyil
下载 APP