Skip to content

数据库锁知识库 - 完整目录 ​

📂 核心索引文件 ​


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 小时

Released under MIT License.