MySQL Next-Key Lock

TLDR: 临键锁是记录锁与间隙锁的组合,采用左开右闭区间,是 InnoDB 加锁的基本单位,用于防止幻读。

Content

临键锁(Next-Key Lock)= 记录锁 + 间隙锁。它同时锁定一条索引记录和该记录之前的间隙,形成左开右闭区间。

例如索引值为 1, 5, 7, 11 时,Next-Key Lock 的可能区间为:(-inf, 1], (1, 5], (5, 7], (7, 11], (11, +inf]。

Next-Key Lock 是 InnoDB 在可重复读隔离级别下的默认加锁单位。在特定条件下会退化:

  • 唯一索引等值查询命中记录 退化为记录锁
  • 等值查询未命中记录 退化为间隙锁(左开右开)