第五章|事务与隔离
本章目标
学习数据库事务的原理和实践,掌握 ACID 特性、隔离级别、锁机制,理解并发控制和一致性保证。
从事务的基本操作开始,理解 ACID 四大特性,学会使用不同的隔离级别处理并发问题,掌握锁机制和死锁处理,最后理解 MVCC 的工作原理。
学习路径
按顺序阅读以下文章,每篇包含讲解、示例和练习:
事务基础:BEGIN、COMMIT、ROLLBACK
理解事务的概念,掌握事务的基本操作。ACID 原则:原子性、一致性、隔离性、持久性
理解事务的四大特性及其保证机制。隔离级别:READ UNCOMMITTED 到 SERIALIZABLE
掌握四种隔离级别,理解脏读、不可重复读、幻读。锁机制与死锁
理解行锁、表锁、意向锁,学会处理死锁。MVCC 与并发控制
理解多版本并发控制的工作原理。
关键概念
事务保证数据一致性
事务是一组操作的逻辑单元,要么全部成功,要么全部失败:
sql
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;如果转账过程中发生错误,ROLLBACK 确保两个账户都不变。
ACID 四大特性
- Atomicity(原子性):全部成功或全部失败
- Consistency(一致性):从一个一致状态到另一个一致状态
- Isolation(隔离性):事务之间相互隔离
- Durability(持久性):提交后永久保存
隔离级别平衡性能与一致性
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| READ UNCOMMITTED | 是 | 是 | 是 |
| READ COMMITTED | 否 | 是 | 是 |
| REPEATABLE READ | 否 | 否 | 是 |
| SERIALIZABLE | 否 | 否 | 否 |
锁控制并发访问
- 共享锁(S锁):读锁,多个事务可以同时持有
- 排他锁(X锁):写锁,独占访问
- 死锁:两个事务互相等待对方释放锁
前置知识
- 掌握 SELECT、INSERT、UPDATE、DELETE
- 理解数据一致性的重要性
- 了解并发的概念
后续章节
完成本章后,继续学习:
第六章:索引与性能
学习索引类型、查询优化、EXPLAIN 分析。第七章:数据定义与约束
掌握 DDL 操作、约束、范式化。
练习答案
本章所有练习的答案和详细解释:第五章练习答案
深入阅读
为什么需要事务?
在多用户并发访问数据库时,如果没有事务保护,可能出现:
- 转账时系统崩溃,钱从一个账户扣除但没有加到另一个账户
- 两个用户同时修改同一行数据,后者覆盖前者的修改
- 查询过程中数据被其他事务修改,导致结果不一致
事务通过 ACID 特性解决这些问题。
性能与一致性的权衡
更高的隔离级别提供更强的一致性保证,但降低并发性能。选择合适的隔离级别取决于应用场景:
- 金融系统:SERIALIZABLE(严格一致性)
- 电商系统:READ COMMITTED(平衡性能与一致性)
- 统计报表:READ UNCOMMITTED(高性能,允许脏读)