Chapter 17 Transactions¶
ACID¶
- Atomicity: 事务是一个原子操作,要么全部执行成功,要么全部不执行。
- Consistency: 事务执行前后,数据库要维持一致性。
- 显式:定义primary key, foreign key 等
- 隐式:例如某些数据必须非负,或者一些默认的等式关系
- Isolation: 事务的执行不受其他事务的影响。
- Durability: 一旦事务提交,其对数据库的修改是永久性的,即使系统崩溃也不会丢失。
A simple model¶
访问数据的方式简化为两种:
- read(X)
- write(X)
Transaction State¶
事务必须处在如下状态中的某个:
- active
- Partially committed
- Failed
- Aborted
- Committed
Concurrent Executions¶
好处:
- 提高CPU和disk利用率
- 减少平均响应时间
潜在问题:
- Lost Update:
- Dirty Read:
- Unrepeatable Read
- Phantom Problem
Schedules¶
Schedule是一组指令序列,指定了并发事务中各个操作的执行顺序。
- Serial Schedule: 串行执行,一定满足ACID。
- Serializable Schedule: 可串行化
Serializability¶
- 基本假设:每个事务都能保证数据库一致性
- 因此一系列串行的事务一定能保持一致性
- 如果一个调度能够等价于某个串行调度,则称为可串行化:
- conflict serializability: 冲突可串行化
- view serializability: 视图可串行化
Conflict Serializability¶
-
对相同的数据,两个事务都进行读操作是没有冲突的,只要有写操作就有冲突。
-
conflict equivalent: 两个调度可以通过一系列 non-conflicting操作的交换互相转换,则称二者是conflict equivalent的
- conflict serializable: 如果一个调度和一个串行调度是conflict equivalent的,则称该调度是conflict serializable的。
Testing for Serializability¶
-
precedence graph: 前驱图
- 有向图,节点是事务,边是冲突的操作
- \(T_1\) 指向 \(T_2\),如果 \(T_1\) 的操作冲突于 \(T_2\) 的操作,且 \(T_1\) 的冲突操作在 \(T_2\) 的冲突操作之前执行。
- 如果图中没有环,则该调度是conflict serializable的。
-
对于无环图,可以通过拓扑排序得到一个串行调度。
Different forms of Serializability¶
- Conflict serializability: 如前所述,只考虑冲突的操作对
- View serializability:
- 相同的数据读取内容:每个事务的读操作必须读到与某个串行执行顺序中相同的数据值。
- 相同的最终写入内容:所有事务执行完成后,数据项的最终值必须与某个串行执行顺序中的最终值相同。
明显后者要求更宽松: + 如果一个调度是conflict serializable的,则它也是view serializable的。 + 但反之不成立:

Recoverability¶
Recoverable Schedules¶
- 避免脏读:如果\(T_j\)read了 \(T_i\)write的数据,则\(T_j\)必须在\(T_i\)commit之后才能commit。
- 避免cascading rollback:
- 一连串的事务之间有依赖关系,如果一个事务回滚,所有依赖它的事务都必须回滚,虽然可恢复但是效率低。
- cascadeless schedules:每一对事务之间都不允许脏读
Weak Levels of Consistency¶
回顾四种潜在问题:Lost Update, Dirty Read, Unrepeatable Read, Phantom Problem
- Serializable: 要求最高,严格串行
- Repeatable Read: 允许Phantom Problem
- Read Committed: 允许Unrepeatable Read和Phantom Problem
- Read Uncommitted: 允许所有问题
隔离级别可以设置:
最后更新:
2025年6月13日 23:48:58
创建日期: 2025年6月7日 00:10:23
创建日期: 2025年6月7日 00:10:23