暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

不可重复读和幻读的简单区分

沪上小丐 2026-03-26
30

mysql幻读和不可重复读虽然表面看都是两次读取的数据不一样,貌似是一回事,其实并不一样。


一句话核心区别:

不可重复读:同一条记录,值变了

幻读:多了/少了整条记录,记录本身没变


详细对比:

1.不可重复读

在同一个事务里,两次查询同一条数据,结果不一样。

场景:

1.事务A查id=1 的余额是100

2.事务B把id=1的余额改成200并提交

3.事务A再次查询id=1的余额,变成200

特点:针对update,同一行被修改了


2.幻读

在同一个事务里,按相同的条件查询,结果集行数变了。

场景:

1.事务A查询 age>20,得到10条记录

2.事务B插入一条新数据,age=25,并提交

3。事务A再次查询,得到11条记录

特点:针对INSERT/DELETE,行数量变了


总结:

不可重复读:记录内容变了

幻读:记录数量变了

不能混为一谈:

解决方式不一样:

不可重复读:锁住对应行就行

幻读:必须锁住范围/间隙(间隙锁),否则新数据还是能进来。



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论