1 幻读的定义
在可重复读隔离级别或者读提交之下(即:在一致性试图之下),在同一个事务中,前后查询同一个范围内的数据时,发现后一次查询所得到的数据是前一次查询时所没有的。我们就成这种称这种情况为幻读。
2 幻读一些说明
- 在在可重复读隔离级别之下,普通的查询操作所使用的快照读,是不会看到其他事务插入的数据的。因此,幻读只有在“当前读”下才会出现。而所谓的当前读就是进行了更新操作
- 幻读仅仅指读取到了新插入的行的数据。由其他事务updat产生的当前读不属于幻读的范畴
3 幻读的产生的原因
在可重复读隔离级别之下,查询的过程中没有给所有的行进行加锁导致幻读。但是有时候即便加了锁,在遇到insert新(不存在)记录时,仍然会导致幻读
4 幻读的解决方案
间隙锁:用于解决insert新记录时导致幻读的情况。给行与行之间的空隙进行了加锁
行锁
行锁+间隙锁的组合,用于避免幻读的产生