不可重复读和幻读都是并发事务中的问题,不过两者的区别主要有以下两点:

  1. 发生场景不同:不可重复读主要涉及到修改数据,而幻读则主要涉及到插入或删除数据。
    1. 不可重复读指的是在同一个事务中,多次读取同一行数据,但是每次读取的结果都不同,这是因为在这个事务读取数据的期间,其他事务修改了这些数据所导致的;
    2. 幻读指的是在同一个事务中,多次执行相同的查询,但是每次查询返回的行数却不同,这是因为在这个事务读取数据的期间,其他事务插入了新的数据所导致的。
  2. 解决方案不同:不可重复读的解决方案通常是使用行锁或者表锁来解决,而幻读的解决方案通常是使用间隙锁来解决。

所以,不可重复读主要涉及到修改数据,而幻读则主要涉及到插入或删除数据。同时,不可重复读的解决方案通常是使用行锁或者表锁,而幻读的解决方案通常是使用间隙锁。

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】