数据库锁知识库 - 完整目录
📂 核心索引文件
01-按锁粒度
根据锁定的数据范围大小进行分类,从大到小依次为:
📄 库/实例级锁
- 文件: 01-按锁粒度/库_实例级锁.md
- 描述: 锁定整个数据库实例,用于备份、维护等全局操作
- 支持数据库: MySQL, PostgreSQL, SQL Server, Oracle
- 关键内容:
- FLUSH TABLES WITH READ LOCK
- 备份期间的锁机制
- 实例维护模式
📄 表级锁
- 文件: 01-按锁粒度/表级锁.md
- 描述: 锁定整张表,开销小但并发度低
- 支持数据库: MySQL (MyISAM), PostgreSQL, SQL Server, Oracle
- 关键内容:
- LOCK TABLES 语法
- 共享读锁 vs 排他写锁
- DDL 操作的隐式表锁
- 锁升级机制
📄 页级锁
- 文件: 01-按锁粒度/页级锁.md
- 描述: 锁定数据页(通常 8KB-16KB),折中方案
- 支持数据库: MySQL BDB, SQL Server (历史)
- 关键内容:
- 页的结构和大小
- 页锁的优缺点
- 现代数据库为何弃用
📄 行级锁
- 文件: 01-按锁粒度/行级锁.md
- 描述: 锁定单行记录,并发度高但开销大
- 支持数据库: MySQL InnoDB, PostgreSQL, SQL Server, Oracle
- 关键内容:
- 基于索引的行锁实现
- 无索引时的锁升级
- SELECT FOR UPDATE
- 行锁的性能考量
02-按锁模式
根据锁的访问控制类型进行分类:
📄 共享锁(S锁 / 读锁)
- 文件: 02-按锁模式/共享锁.md
- 描述: 允许多个事务同时读取同一资源
- 支持数据库: 所有主流数据库
- 关键内容:
- LOCK IN SHARE MODE
- 共享锁兼容性矩阵
- 读写分离场景
- 快照读 vs 当前读
📄 排他锁(X锁 / 写锁)
- 文件: 02-按锁模式/排他锁.md
- 描述: 独占访问,阻止其他事务读写
- 支持数据库: 所有主流数据库
- 关键内容:
- UPDATE/DELETE/INSERT 自动加 X 锁
- FOR UPDATE 语法
- 排他锁的互斥性
- 锁持有时间优化
📄 意向锁
- 文件: 02-按锁模式/意向锁.md
- 描述: 表级锁,表明事务将在行级别加锁
- 支持数据库: MySQL InnoDB, SQL Server
- 关键内容:
- 意向共享锁(IS): 准备在行上加 S 锁
- 意向排他锁(IX): 准备在行上加 X 锁
- 意向锁的作用和意义
- 多层级锁的协调机制
03-按锁算法
主要针对 MySQL InnoDB 引擎的锁算法实现:
📄 记录锁(Record Lock)
- 文件: 03-按锁算法/记录锁.md
- 描述: 锁定索引记录本身
- 支持数据库: MySQL InnoDB, Oracle
- 关键内容:
- 基于聚簇索引的锁定
- 唯一索引 vs 普通索引
- 主键查询的锁行为
- 覆盖索引与记录锁
📄 间隙锁(Gap Lock)
- 文件: 03-按锁算法/间隙锁.md
- 描述: 锁定索引记录之间的间隙,防止幻读
- 支持数据库: MySQL InnoDB (REPEATABLE READ)
- 关键内容:
- 间隙锁的锁定范围
- 防止 INSERT 幻读
- 对并发的影响
- 如何避免不必要的间隙锁
📄 临键锁(Next-Key Lock)
- 文件: 03-按锁算法/临键锁.md
- 描述: 记录锁 + 间隙锁的组合,InnoDB 默认锁算法
- 支持数据库: MySQL InnoDB (REPEATABLE READ)
- 关键内容:
- 左开右闭区间 (gap, record]
- 范围查询的锁定行为
- 幻读的彻底解决
- 性能调优建议
04-按锁策略
根据锁的使用时机和态度进行分类:
📄 悲观锁
- 文件: 04-按锁策略/悲观锁.md
- 描述: 假设冲突必然发生,先加锁再操作
- 支持数据库: 所有主流数据库
- 关键内容:
- SELECT FOR UPDATE
- 死锁预防策略
- 适用场景分析
- 性能影响评估
📄 乐观锁
- 文件: 04-按锁策略/乐观锁.md
- 描述: 假设冲突很少发生,提交时检测冲突
- 支持数据库: 所有主流数据库(应用层实现)
- 关键内容:
- 版本号机制
- CAS (Compare And Swap)
- MVCC 与乐观锁的关系
- 重试策略设计
05-特殊或专用锁
数据库系统中的专用锁类型:
📄 元数据锁(MDL - Metadata Lock)
- 文件: 05-特殊或专用锁/元数据锁.md
- 描述: 保护表结构元数据,防止 DDL 和 DML 冲突
- 支持数据库: MySQL 5.5+, PostgreSQL, SQL Server
- 关键内容:
- DDL 操作的 MDL 行为
- MDL 等待队列
- 长事务导致的 MDL 阻塞
- 排查和解决方法
📄 自增锁(AUTO-INC Lock)
- 文件: 05-特殊或专用锁/自增锁.md
- 描述: 保证 AUTO_INCREMENT 列值的唯一性和连续性
- 支持数据库: MySQL InnoDB
- 关键内容:
- innodb_autoinc_lock_mode 参数
- 批量插入的性能优化
- 自增锁的作用范围
- 主从复制的影响
📄 插入意向锁(Insert Intention Lock)
- 文件: 05-特殊或专用锁/插入意向锁.md
- 描述: INSERT 操作时在间隙上加的特殊锁
- 支持数据库: MySQL InnoDB
- 关键内容:
- 插入意向锁的本质
- 与间隙锁的交互
- 插入冲突的检测
- 死锁案例分析
📄 谓词锁(Predicate Lock)
- 文件: 05-特殊或专用锁/谓词锁.md
- 描述: 基于查询条件的逻辑锁,用于 Serializable 隔离级别
- 支持数据库: PostgreSQL
- 关键内容:
- 谓词锁的原理
- 序列化异常检测
- 与间隙锁的对比
- 性能开销
📄 键范围锁(Key-Range Lock)
- 文件: 05-特殊或专用锁/键范围锁.md
- 描述: SQL Server 中的范围锁,类似 InnoDB 的临键锁
- 支持数据库: SQL Server
- 关键内容:
- 范围锁的实现机制
- Serializable 隔离级别
- 与索引的关系
- 监控和调优
06-按锁管理方式
根据锁的获取和管理方式进行分类:
📄 隐式锁
- 文件: 06-按锁管理方式/隐式锁.md
- 描述: 数据库自动管理的锁,用户无需显式指定
- 支持数据库: 所有主流数据库
- 关键内容:
- 自动加锁规则
- 语句级别的锁行为
- 事务隔离级别的影响
- 隐式锁的优化
📄 显式锁
- 文件: 06-按锁管理方式/显式锁.md
- 描述: 用户通过 SQL 语句手动指定的锁
- 支持数据库: 所有主流数据库
- 关键内容:
- SELECT FOR UPDATE/SHARE
- LOCK TABLES
- NOWAIT / SKIP LOCKED
- 显式锁的最佳实践
📊 知识库统计
| 维度 | 数量 |
|---|---|
| 分类目录 | 6 个 |
| 核心文档 | 19 篇 |
| 索引文件 | 5 个 |
| 总文档数 | 24 个 |
| 覆盖数据库 | MySQL, PostgreSQL, SQL Server, Oracle, MariaDB |
| 预计阅读时间 | 8-12 小时 |