MySQL数据库行级锁之间隙锁、临键锁

间隙锁

默认情况下,InnoDB在 REPEATABLE READ事务隔离级别运行,InnoDB使用 next-key 锁进行搜索和索引扫描,以防止幻读。

  • 索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。
  • 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。
  • 索引上的范围查询(唯一索引)–会访问到不满足条件的第一个值为止。

注意:间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁。

演示

数据库的表
MySQL数据库行级锁之间隙锁、临键锁_第1张图片

索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁

执行更新id为88的数据
MySQL数据库行级锁之间隙锁、临键锁_第2张图片
查看此时行锁和意向锁的情况:id为60和100之间加入的间隙锁
MySQL数据库行级锁之间隙锁、临键锁_第3张图片

你可能感兴趣的:(mysql,数据库,mysql)