不想看逼逼直接跳到最后,还能请各位大佬赐教,这个问题真的是总所纷纭。
这个帖子我是发在牛客上的,也收集了一些资料。后面是几种说法:
1.能解决,使用MVCC,在第一次读取的时候就产生了快照,你再读取还是历史数据(即快照数据),其余事务插入或者删除数据不会影响。
2. 只解决了部分,只解决了读的问题。没有解决update问题。 并且推荐我去看这个帖子 https://www.cnblogs.com/liyus/p/10556563.html
3.不能解决,我查阅了MYSQL的官方文档,发现关于幻读解决办法只有用Next-key
4. 幻读分为两种,一种是当前读,这种需要Next-key解决,一种是快照读,快照读可以使用MVCC解决的。
5.为什么MySQL在可重复读隔离级别下可以解决幻读?
答:因为使用了间隙锁;(这个位置我感觉有错误,可重复度的隔离级别是不能解决幻读的)
首先,要理解,只有在当前读的前提下才会出现幻读,快照读是不存在幻读的,我每一次快照读都是一致的.所以,既然都是当前读了,MVCC当然不可以解决幻读,因为当前读,读取的是最新的数据.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
个人见解,MVCC多版本并发控制,不能解决幻读。
幻读, 默认的事务隔离级别是REPEATABLE READ。采用Next-Key Locking的算法。
Next-Key Locking( Record Lock + Gap Lock ) 锁定一个范围,并且锁定记录本身 。
主键Id加record锁,是锁定记录本身,如果解决幻读不能直接加 Gap Lock
######可重复度的事务隔离级别好像不能解决幻读吧,但是next-key确实可以解决幻读。######
有意思 到底能不能啊
######我也不知道,这个问题提出来后,总说纷纭,我还去stackoverflow上提问了,也没人回答,然后只好去看看了看官方文档,官方文档关于幻读得解决只提到了next-key。应该没有解决的吧。