数据库:事务、隔离级别与锁
ACID、四种隔离级别与并发问题,MySQL 行锁/间隙锁/Next-Key Lock 与死锁。
本节你将能
说清事务隔离级别如何取舍,以及 MySQL 在 RR 下如何用锁防幻读。
核心要点
- ACID:原子性(undo log)、一致性、隔离性(MVCC/锁)、持久性(redo log)。
- 并发问题:脏读、不可重复读、幻读;隔离级别 RU/RC/RR/串行化逐级加锁。
- MVCC:快照读靠 undo 版本链 + ReadView,实现 RR 下可重复读。
- 锁:行锁(Record)、间隙锁(Gap)、Next-Key Lock(锁区间防幻读);RC 只用行锁。
- 死锁:交叉加锁;DB 检测等待图回滚代价小的事务;业务按固定顺序加锁规避。
面试连招
常被追问:RR 怎么解决幻读?MVCC 能否完全避免幻读?Next-Key Lock 是什么?
常见坑
在 RC 下误以为无幻读;大事务持有锁久引发死锁;用不稳定的条件做间隙锁范围。