在 MySQL 的 InnoDB 存储引擎中,行锁(Row-level Locks)是实现并发控制和事务隔离级别的核心机制。需要特别注意的是:InnoDB 的行锁是加在“索引”上的,而不是直接加在物理行记录上。 如果查询没有命中任何索引,行锁会退化为表锁(实际上是锁住了隐藏的聚簇索引的所有记录及间隙)。 根据锁的算法和作用范围,InnoDB 的行锁主要分为以下 4 种类型: 1. 记录锁(Record Lock) 定义:仅仅锁住单条索引记录。 作用范围:精确命中一条记录。 触发场景:通常出现在使用唯一索引(包括主键)进行等值查询且命中记录时。 示例: 此时,InnoDB 只会对 的这一行索引记录加锁,阻止其他事务对其进行 或 。 2. 间隙锁(Gap Lock) 定义:锁住索引记录之间的间隙(Gap),或者锁住第一条记录之前、最后一条记录之后的间隙。它不包含索引记录本身。 作用范围:开区间 。 核心目的:为了阻止其他事务在这个间隙内插入(INSERT)新的数据,从而防止幻读(Phantom Read)。 触发场景: 在 可重复读(Repeatable Read, RR) 隔离级别...