首页/数据/数据库速查/InnoDB 锁类型总览(行锁/表锁/意向锁/MDL)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

InnoDB 锁类型总览(行锁/表锁/意向锁/MDL)

锁家谱:行级(记录锁/间隙锁/临键锁)、表级(意向锁 IS/IX、AUTO-INC)、元数据锁(MDL);业务感知的锁等待 90% 来自行锁与 MDL。

数据库速查数据更新于 2026-10-12

锁类型

锁粒度触发
记录锁 Record Lock行等值命中索引记录
间隙锁 Gap Lock区间RR 下范围条件
临键锁 Next-Key记录+间隙RR 默认行为
意向锁 IS/IX表行锁存在时自动加
MDL表级元数据DDL/DML 对表结构

查看锁现状

查看锁现状
SELECT * FROM performance_schema.data_locks\G
SELECT * FROM sys.innodb_lock_waits\G
SHOW ENGINE INNODB STATUS\G   -- TRANSACTIONS 段
没有索引的 WHERE 会退化为扫全表并锁住大量行(甚至锁表效果),锁问题的根因常是索引缺失。

易错点

  • 以为「只锁了一行」:无索引条件实际锁了全表记录
  • 忽略 MDL:一个长事务没提交,DDL 全部排队,误以为锁在行上

数据来源与参考

  • MySQL 8.0 Reference Manual: InnoDB Locking

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌