MySQL幻读

作者: 慧鑫coming | 来源:发表于2019-02-28 08:10 被阅读0次

幻读(phantom read)

  • 前提条件:InnoDB引擎,可重复读隔离级别,使用当前读时。
  • 表现:一个事务(同一个read view)在前后两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行。两点需要说明
      1、在可重复读隔离级别下,普通查询是快照读,是不会看到别的事务插入的数据的,幻读只在当前读下才会出现。
      2、幻读专指新插入的行,读到原本存在行的更新结果不算。因为当前读的作用就是能读到所有已经提交记录的最新值。

幻读的影响

  • 会造成一个事务中先产生的锁,无法锁住后加入的满足条件的行。
  • 产生数据一致性问题,在一个事务中,先对符合条件的目标行做变更,而在事务提交前有新的符合目标条件的行加入。这样通过binlog恢复的数据是会将所有符合条件的目标行都进行变更的。

幻读产生的原因

  • 行锁只能锁住行,即使把所有的行记录都上锁,也阻止不了新插入的记录。

如何解决幻读

  • 将两行记录间的空隙加上锁,阻止新记录的插入;这个锁称为间隙锁
  • 间隙锁与间隙锁之间没有冲突关系。跟间隙锁存在冲突关系的,是往这个间隙中插入一个记录这个操作。

相关文章

  • mysql的幻读处理机制

    当前与快照读 当前与快照读 mysql的幻读处理机制 参考Mysql(Innodb)如何避免幻读我在mysql 8...

  • 程序员之MySQL

    1.MySQL解决幻读问题 MySQL InnoDB通过版本号解决事务的幻读问题a.select情况:InnoD...

  • 美团三面:一直追问我, MySQL 幻读被彻底解决了吗?

    什么是幻读? 首先来看看 MySQL 文档是怎么定义幻读(Phantom Read)的: The so-calle...

  • MySQL 间隙锁

    间隙锁 间隙锁在MySQL中解决了幻读问题,在MySQL中通过RR也能解决幻读。 但是使用间隙锁时有两个坑需要注意...

  • Mysql —— 幻读

    前言 在学习隔离级别以及mysql的并发问题处理时,一直对幻读的概念比较模糊,在网上搜集了很多资料,也是各有各的说...

  • MySQL 幻读

    MySQL 在当前读的情况下,如果看到了其他事务新插入的一条数据,这种情况称为幻读。是指一个事务在前后两次查询同一...

  • MySQL幻读

    幻读(phantom read) 前提条件:InnoDB引擎,可重复读隔离级别,使用当前读时。 表现:一个事务(同...

  • mysql幻读

    开启a,b两个数据库连接,a、b都开启事务后,b插入了一条数据R并提交,验证对a的操作造成的影响

  • mysql 幻读

    在说幻读之前,首先要提一下什么是当前读和快照读当前读像select lock in share mode(共享锁)...

  • Mysql幻读

    当设置为可重复读(repeatable read)隔离级别时,可以保证当前事务中不因为其他事务对数据进行了修改而出...

网友评论

    本文标题:MySQL幻读

    本文链接:https://www.haomeiwen.com/subject/gkrgeqtx.html