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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




