首页 新闻 会员 周边 捐助

不可重复读和幻读是一个东西吗?

0
悬赏园豆:5 [已解决问题] 解决于 2020-09-10 13:52

在《mysql技术内幕:Innodb存储引擎》中有这么一句“ 在mysql官方文档中将不可重复读的问题定义为phantom problem,即幻像问题。 ”书中对不可重复读和所谓的幻读的解决办法也是一样的采用next-key locking机制,所以不可重复读和幻读是一个东西吗?

雾林的主页 雾林 | 初学一级 | 园豆:110
提问于:2020-08-25 17:03
< >
分享
最佳答案
0

不可重复读和幻读不是一个东西,楼上WMG-Eight已经解释了,我再详细解释一下:
不可重复读问题:这是由于查询时系统中其他事务修改的提交而引起的。比如事务T1开启,查询表字段a=1,此时事务T2开启修改字段a=2并提交,事务T1再次查询得到结果a=2,在同一个事务中查询两次结果不同,无法重复,所以叫不可重复读。
幻读:事务T1开启查询某个表A的count=2,此时事务T2开启向A表中插入一条数据并提交,事务T1再次查询A表count=3,第二次多读出一条记录。
next-key locking:简单来说就是将自己查询过程中所见到的那些行,全部都锁住,所以以上两个问题都没了。

收获园豆:5
8号位 | 小虾三级 |园豆:596 | 2020-08-27 12:53
其他回答(3)
1

不可重复读 是对同一条数据来说的,主要是修改,比如修改了某些字段值,导致多次读同一条数据不一样。
幻读 是对一个范围内的数据,主要是新增或删除,导致查询出来的数据数量不一致。
你可以搜下,有很多详细的解释的文章。。。。

WMG-Eight | 园豆:973 (小虾三级) | 2020-08-26 09:11
0

后面再细看吧,应该是底层实现锁的机制不同

雾林 | 园豆:110 (初学一级) | 2020-08-26 10:34
0

你可以查阅一些MySQL的隔离级别(读已提交、读未提交、可重复读、串行读)资料;
你上面说的不可重复读和幻读,是不同隔离级别下的现象,除此之外,还有脏读、可重复读

寻觅beyond | 园豆:923 (小虾三级) | 2020-08-27 10:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册