mysql之MVCC幻读现象


什么是幻读

幻读是一个事务多次查询,发现前后数据记录条数不一样, 比如说另一个事务在该查询条件下,插入了一条记录,后面又出现了事务回滚的情况。

MVCC能解决幻读问题吗

MVCC基于快照读可以解决幻读,如果是基于当前读还是会出现幻读问题。基于快照读, 根据ReadView可见性判断,是可以保证读取的数据版本都是一样的,即使在这个过程中,插入的新数据也不影响读取。倘若是当前读,此时会读取最新的数据,包括其他已经提交事务的数据,这样就导致前后查询结果不同,产生了幻读现象

在RR隔离级别下,解决幻读

在当前读时候,进行加锁,比如共享锁 lock in share mode 或者是 排他锁 for udpate ,这样其他事务在插入操作或者删除操作,会被阻塞。阻塞的原因是使用了间隙锁和临键锁,锁住索引记录之间的范围,避免其他事务可以在该范围内插入或者删除记录
注意:
间隙锁: 锁住索引记录范围,不包括记录本身
临键锁: 锁住索引记录范围,同时锁定记录本身


文章作者:
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !
评论
  目录