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

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

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