InnoDB行锁:Record Lock、Gap Lock、Next-Key Lock
InnoDB行锁分类 InnoDB行锁 ├─ Record Lock(记录锁):锁住单行记录 ├─ Gap Lock(间隙锁):锁住记录间的间隙 └─ Next-Key Lock(临键锁):Record Lock + Gap Lock 适用场景: REPEATABLE READ隔离级别(默认) SERIALIZABLE隔离级别 1. Record Lock(记录锁) 定义 锁住索引记录,不锁间隙。 加锁条件 唯一索引等值查询(命中记录): -- 建表 CREATE TABLE account ( id INT PRIMARY KEY, name VARCHAR(50), balance INT, KEY idx_balance (balance) ); INSERT INTO account VALUES (1, 'A', 1000), (5, 'B', 1500), (10, 'C', 2000), (15, 'D', 2500); -- 加记录锁 START TRANSACTION; SELECT * FROM account WHERE id = 5 FOR UPDATE; -- 只锁id=5这一行(Record Lock) -- 其他事务 UPDATE account SET balance = 900 WHERE id = 5; -- ❌ 阻塞(锁冲突) UPDATE account SET balance = 900 WHERE id = 10; -- ✅ 不阻塞(不同行) INSERT INTO account VALUES (7, 'E', 800); -- ✅ 不阻塞(无间隙锁) 锁范围示意 id索引: 1 ─── 5 ─── 10 ─── 15 │ ▼ │ │ │ [锁定] │ │ │ │ │ │ └─────┴─────┴─────┘ 不锁间隙 2. Gap Lock(间隙锁) 定义 锁住两个索引记录之间的间隙,防止其他事务在间隙中插入数据。 ...