InnoDB 的行锁基于索引实现,理解记录锁、间隙锁与 Next-Key Lock 是分析死锁的前提。
一、三类行级锁
- Record Lock:锁定单条索引记录
- Gap Lock:锁定索引记录之间的间隙,阻止插入
- Next-Key Lock:Record Lock + Gap Lock,锁定左开右闭区间
二、死锁排查
sql
-- 查看最近一次死锁信息
SHOW ENGINE INNODB STATUS\G死锁日志中 LATEST DETECTED DEADLOCK 段会展示两个事务持有的锁与等待的锁。常见成因包括:加锁顺序不一致、缺少索引导致全表扫描加锁、长事务持有锁过久。规避手段:统一加锁顺序、缩短事务、为查询条件建立合适索引。