Mysql Next-Key锁

发布于 2023-05-05  234 次阅读


目标:什么是Next-Key Lock,Next-Key Lock的加锁逻辑

什么是Next-Key锁

Next-Key锁间隙锁 + 行锁(记录锁)的组合

事务隔离级别分别为可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)下,InnoDB才会使用间隙锁。

间隙锁是一种锁定记录之间的“间隙”的锁。它并不锁定任何真实存在的记录,而是锁定一个范围,以防止其他事务在这个范围内插入新的记录。间隙锁的主要目的是为了防止幻读问题。


Next-Key锁的加锁逻辑

  1. 加锁时以Next-Key为基本单位
  2. 查找过程中扫描过的范围才加锁
  3. 唯一索引等值查询,没有间隙锁,只加行锁
  4. 索引等值查询最右一个扫描到的不满足条件值的不加行锁
  5. 索引覆盖且只加S锁时,不锁主键索引

示例

  1. 等值查询
  2. 非唯一索引等值查询
  3. 主键索引范围查询
  4. 非唯一索引范围查询
  5. 非索引字段查询

间歇性凌云壮志,持续性混吃等死