MySQL 中的意向锁(Intention Lock)是 InnoDB 存储引擎实现的一种表级锁(Table-level Lock)。 简单来说,意向锁的核心作用是:快速判断表中有没有记录被加锁,从而提高表级锁和行级锁之间冲突检测的效率。 为了让你彻底理解,我们可以从“它解决了什么问题”、“它的工作原理”以及“生活中的打比方”三个方面来拆解。 --- 1. 意向锁解决了什么问题?(为什么需要它?) 在没有意向锁的情况下,假设有这样一个场景: 1. 事务 A 给表 中的第 10 行数据加了一个排他锁(行锁,X锁),正在修改这行数据。 2. 此时,事务 B 想要修改表结构(或者执行 ),这需要给整个 表加一个表级排他锁(表级 X锁)。 冲突检查的难题: 事务 B 在加表锁之前,必须确保这整张表中没有任何一行数据被其他事务锁定。 如果没有意向锁,数据库就只能从头到尾遍历全表(全表扫描),去检查是不是某一行有行锁。如果表里有上千万条数据,这种遍历检查的效率会极低,严重影响性能。 引入意向锁后的解决方式: 有了意向锁之后,流程变成了这样: 1. 事务 A 在给第 10 行加行锁之前,必须先...