MySQL InnoDB Locks

TLDR: InnoDB 在可重复读隔离级别下使用记录锁、间隙锁、临键锁三种行级锁机制来保证事务隔离性和防止幻读。

Content

InnoDB 存储引擎的行级锁分为三种类型:

  • 记录锁(Record Lock):锁定索引上的单条记录,阻止其他事务对该行的修改和删除。
  • 间隙锁(Gap Lock):锁定索引范围之间的间隙,阻止其他事务在间隙中插入新数据。仅在可重复读(RR)隔离级别下生效。
  • 临键锁(Next-Key Lock):记录锁 + 间隙锁的组合。左开右闭区间。是 InnoDB 加锁的基本单位。

三者的关系:临键锁是默认加锁单位,在特定条件下会退化为记录锁(唯一索引等值查询命中记录时)或间隙锁(等值查询未命中记录时)。