1. InnoDB 锁机制概述
在数据库系统中,事务隔离级别的实现离不开锁机制的支持。InnoDB 作为 MySQL 最常用的存储引擎,其锁机制设计精巧而复杂。理解这些锁的工作原理,对于开发高性能、高并发的数据库应用至关重要。
InnoDB 主要实现了三种类型的锁:记录锁(Record Lock)、间隙锁(Gap Lock)和 Next-Key Lock。这三种锁共同构成了 InnoDB 在可重复读(Repeatable Read)隔离级别下的锁定机制,用于解决并发事务中的各种数据一致性问题。
提示:可重复读(RR)是 MySQL 的默认隔离级别,它通过 MVCC(多版本并发控制)和锁机制共同保证事务隔离性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 记录锁(Record Lock)详解
2.1 记录锁的基本概念
记录锁是最基础的行级锁,它锁定的是索引记录本身。当一条记录被锁定后,其他事务无法修改或删除这条记录。需要注意的是,记录锁锁定的是索引条目,而不是数据行本身。这是因为 InnoDB 的聚簇索引特性,二级索引最终都会指向主键索引。
记录锁有两种模式:
- 共享锁(S锁):允许其他事务读取但不能修改锁定的记录
- 排他锁(X锁):阻止其他事务读取或修改锁定的记录
2.2 记录锁的加锁场景
记录锁会在以下操作中自动获取:
SELECT ... FOR UPDATE语句SELECT ... LOCK IN SHARE MODE语句UPDATE和DELETE语句
sql复制-- 事务A获取id=10记录的排他锁
START TRANSACTION;
SELECT * FROM users WHERE id = 10 FOR UPDATE;
-- 事务B尝试修改同一条记录会被阻塞
UPDATE users SET name = 'Bob' WHERE id = 10;
2.3 记录锁的兼容性矩阵
| 锁模式 | 共享锁(S) | 排他锁(X) |
|---|---|---|
| 共享锁(S) | 兼容 | 冲突 |
| 排他锁(X) | 冲突 | 冲突 |
在实际应用中,记录锁虽然简单,但却是构建更复杂锁机制的基础。理解记录锁的行为有助于我们分析更复杂的并发场景。
