Skip to content

04 - 锁机制

定位:锁是数据库并发控制的最终防线——理解锁的粒度、兼容性和死锁检测,才能写出无死锁的高并发代码 面试高频度:⭐⭐⭐⭐⭐


一、板块在体系中的位置

┌──────────────────────────────────────┐
│      03-SQL与事务 (前驱知识)          │
│      MVCC、隔离级别、ACID            │
└────────────────┬─────────────────────┘

┌──────────────────────────────────────┐
│      04-锁机制 (本板块)               │
│  ┌────────┐ ┌────────┐ ┌────────┐  │
│  │ 锁分类  │ │行锁与  │ │死锁    │  │
│  │        │ │间隙锁  │ │分析    │  │
│  └────────┘ └────────┘ └────────┘  │
└───────┬─────────────────────────────┘


┌──────────────────────────────────────┐
│      05-日志系统                     │
│      Redo + Undo + Binlog           │
└──────────────────────────────────────┘

二、知识全景图

InnoDB 锁体系

├── 粒度
│   ├── 行级锁 (Row Lock)
│   │   ├── Record Lock     ── 锁定单条索引记录
│   │   ├── Gap Lock        ── 锁定索引记录之间的间隙
│   │   └── Next-Key Lock   ── Record Lock + Gap Lock(防幻读)
│   ├── 表级锁 (Table Lock)
│   │   ├── 意向共享锁 (IS)
│   │   └── 意向排他锁 (IX)
│   └── 其他
│       ├── 自增锁 (AUTO-INC Lock)
│       └── 谓词锁 (Predicate Lock,空间索引)

├── 模式
│   ├── 共享锁 (S Lock)  ── 读读不互斥,读写互斥
│   └── 排他锁 (X Lock)  ── 读写、写写都互斥

├── 加锁方式
│   ├── 隐式加锁 ── DML 语句自动加锁
│   ├── 显式加锁 ── SELECT ... FOR UPDATE / LOCK IN SHARE MODE
│   └── 锁升级 ── 行锁不会升级为页锁/表锁

└── 死锁
    ├── 四个必要条件
    └── 检测机制

三、子专题导航

#主题面试频率核心内容
**InnoDB锁分类**InnoDB 锁分类⭐⭐⭐⭐行锁/表锁/意向锁、S锁/X锁、锁兼容性矩阵
**行锁与间隙锁**行锁与间隙锁⭐⭐⭐⭐⭐Record/Gap/Next-Key Lock、加锁规则、幻读防御
**死锁分析与排查**死锁分析与排查⭐⭐⭐⭐死锁原因、SHOW ENGINE INNODB STATUS、常用策略

四、核心考点速记

考点1:S锁和X锁的兼容性

当前持有锁请求 S 锁请求 X 锁
S 锁✅ 兼容❌ 等待
X 锁❌ 等待❌ 等待

考点2:三种行锁的区别

Record Lock:    锁定索引上的某一条记录
                例如: WHERE id=1 → 只锁 id=1 这行

Gap Lock:       锁定两条索引记录之间的间隙
                例如: WHERE id BETWEEN 1 AND 10 → 锁(1,10)间隙
                作用: 防止其他事务在间隙中插入新行(防幻读)

Next-Key Lock:  Record Lock + Gap Lock
                例如: 对 id=10 加 Next-Key Lock → 锁[10, 下一个key)
                作用: 锁定记录+防止前面间隙插入 = RR 下防幻读

📚 相关文件

  • 上游板块:**SQL与事务**
  • 下游板块:**日志系统**
  • ← 返回 **设计文档**

Knowledge4J — Java 知识库