MySQL InnoDB Locks
TLDR: InnoDB 在可重复读隔离级别下使用记录锁、间隙锁、临键锁三种行级锁机制来保证事务隔离性和防止幻读。
Content
InnoDB 存储引擎的行级锁分为三种类型:
- 记录锁(Record Lock):锁定索引上的单条记录,阻止其他事务对该行的修改和删除。
- 间隙锁(Gap Lock):锁定索引范围之间的间隙,阻止其他事务在间隙中插入新数据。仅在可重复读(RR)隔离级别下生效。
- 临键锁(Next-Key Lock):记录锁 + 间隙锁的组合。左开右闭区间。是 InnoDB 加锁的基本单位。
三者的关系:临键锁是默认加锁单位,在特定条件下会退化为记录锁(唯一索引等值查询命中记录时)或间隙锁(等值查询未命中记录时)。
Related Pages
- MySQL Gap Lock — 间隙锁详解及 6 个案例
- MySQL Record Lock — 记录锁
- MySQL Next-Key Lock — 临键锁