事务理论是数据库设计的基石。本篇先看 ACID 的四个基本特性,再看它们在 MySQL 中分别靠什么机制来保证。
什么是 ACID
一个事务有四个基本特性,也就是我们常说的 ACID:
- Atomicity(原子性):事务是一个不可分割的整体,事务内所有操作要么全做成功,要么全失败
- Consistency(一致性):事务执行前后,数据从一个状态到另一个状态必须是一致的(A 向 B 转账,不能出现 A 扣了钱,B 却没收到)
- Isolation(隔离性):多个并发事务之间相互隔离,不能互相干扰
- Durability(持久性):事务完成后,对数据库的更改是永久保存的,不能回滚
ACID 靠什么保证的呢
以 MySQL 为例,四个特性各有对应的实现机制:
| 特性 | 含义 | MySQL 中的保证机制 |
|---|---|---|
| A - 原子性 | 全做成功或全失败 | undo log 日志保证:它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的 SQL |
| C - 一致性 | 状态迁移必须一致 | 一般由代码层面来保证 |
| I - 隔离性 | 并发事务互不干扰 | MVCC 来保证 |
| D - 持久性 | 提交即永久生效 | 内存 + redo log 来保证:MySQL 修改数据同时在内存和 redo log 记录这次操作,事务提交的时候通过 redo log 刷盘,宕机的时候可以从 redo log 恢复 |
分布式场景下事务的取舍,见后续的 分布式理论 - CAP 与 分布式理论 - BASE。
系列导航
- 上一篇:软件工程 001:常见开发理论
- 下一篇:软件工程 003:分布式理论 - CAP