数据库锁详解(以 PostgreSQL 为主线)
目标:2 小时,彻底搞懂「数据库为什么要加锁、有哪些锁、它们到底有什么区别」。
本教程重原理、重思路,不深挖底层实现。用并发冲突的真实场景驱动,让你不再被一堆锁名词绕晕,能说清楚「什么场景该用哪种锁」。
这篇教程适合谁?
- 学过 PostgreSQL 事务,但对「锁」还是一团浆糊的同学
- 听过「行锁、表锁、乐观锁、悲观锁、MVCC」这些词,但说不清区别的同学
- 遇到过「数据被并发改乱了」「死锁」「更新丢失」,想搞懂根源的同学
学完你能做到
- 说清楚数据库为什么需要锁(并发会带来什么问题)
- 分清锁的两种分类维度:按粒度(表锁/行锁)和按模式(共享锁/排他锁)
- 讲清楚乐观锁 vs 悲观锁的区别和各自适用场景
- 理解 PostgreSQL 的杀手锏 MVCC——为什么它能做到「读写不互相阻塞」
- 看懂死锁是怎么产生的,以及怎么避免
- 面对一个并发场景,能选出合适的加锁策略
为什么以 PostgreSQL 为主线?
结合你的技术栈(Python + FastAPI + PostgreSQL),本教程用 PostgreSQL 讲解。
特别说明:PostgreSQL 的并发控制核心是 MVCC(多版本并发控制),和 MySQL InnoDB 在实现细节上有明显不同(比如 PostgreSQL 没有 InnoDB 那种「间隙锁」的概念)。本教程讲通用的锁理论,并落到 PostgreSQL 的具体做法上。理论是相通的,换成别的数据库也能举一反三。
目录(建议按顺序学)
第一部分 · 理解篇(搞懂「为什么」)
- 01 - 为什么需要锁
第二部分 · 分类篇(把锁理清楚)
- 02 - 按粒度分:表锁与行锁
- 03 - 按模式分:共享锁与排他锁
- 04 - 乐观锁与悲观锁
第三部分 · PostgreSQL 篇(落到实处)
- 05 - MVCC:PostgreSQL 的并发杀手锏
- 06 - 死锁:产生、排查与避免
第四部分 · 总结篇
- 07 - 总结:一张表看懂所有锁
怎么用这份教程?
- 赶时间:看 01 建立动机,再看 04(乐观/悲观)和 05(MVCC),抓住最实用的部分。
- 想系统学:从头按顺序读,重点理解每章的「一句话本质」和对比表格。
开始吧 → 01 - 为什么需要锁