事务与并发控制知识体系概览
问题
什么是数据库事务?为什么需要并发控制?事务与并发控制涉及哪些核心知识?
答案
什么是事务
事务(Transaction)是数据库操作的 最小逻辑工作单元,由一系列操作组成,这些操作要么全部执行成功,要么全部回滚。
-- 转账场景
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 如果任一步骤失败,ROLLBACK 撤销所有变更
为什么需要并发控制
在多个事务同时执行时,如果不加以控制,会出现以下问题:
知识体系总览
各数据库事务对比
| 特性 | MySQL (InnoDB) | PostgreSQL | MongoDB | Redis |
|---|---|---|---|---|
| ACID 支持 | ✅ | ✅ | ✅(4.0+ 多文档) | ❌(仅 MULTI 原子性) |
| 默认隔离级别 | 可重复读(RR) | 读已提交(RC) | 快照隔离 | - |
| MVCC | ✅ | ✅(更完善) | ✅ | - |
| 行锁 | ✅ | ✅ | ✅(文档级) | - |
| 间隙锁 | ✅ | ❌ | ❌ | - |
| 分布式事务 | XA | ✅ | ✅(分片事务) | - |
| 嵌套事务 | Savepoint | Savepoint | ❌ | ❌ |
面试重点
| 知识点 | 重要度 | 高频问题 |
|---|---|---|
| ACID 四大特性 | ⭐⭐⭐⭐⭐ | ACID 是什么?各自如何保证? |
| 隔离级别 | ⭐⭐⭐⭐⭐ | 四种隔离级别?默认哪个? |
| MVCC | ⭐⭐⭐⭐⭐ | MVCC 如何实现?Read View? |
| 幻读 | ⭐⭐⭐⭐⭐ | RR 如何解决幻读? |
| 锁类型 | ⭐⭐⭐⭐ | 行锁、间隙锁、Next-Key Lock? |
| 死锁 | ⭐⭐⭐⭐ | 死锁怎么产生?怎么解决? |
| 分布式事务 | ⭐⭐⭐⭐ | 2PC、TCC、Saga? |
本分类文档导航
| 文档 | 内容 |
|---|---|
| ACID 特性 | 原子性、一致性、隔离性、持久性的实现原理 |
| 隔离级别 | 四种隔离级别、并发问题、各数据库默认级别 |
| MVCC 原理 | 版本链、Read View、快照读/当前读 |
| 死锁 | 死锁条件、检测、预防、排查 |
| 分布式事务 | 2PC、TCC、Saga、最终一致性 |