Ch 17
1. 说明ACID分别指的是什么,并说明其在数据库系统中的重要性。
A:atomicity,原子性指一个事务的操作要么全部发生,要么全部不发生。
C:consistency,一致性指事务执行前后,数据库的完整性约束未被破坏,数据是合法的。
I:isolation,隔离性指事务虽然可以并发执行,但事务间并不会相互影响。
D:durability,持久性指事务对数据的修改不会因为程序故障,主机断电等因素消失。
2. 哪些存储类别可以用来确保持久性?为什么?
外存,比如闪存,硬盘等,因为它们是非易失性存储器,掉电非易失,所以,即使主机断电事务对数据的修改也不会消失,确保持久性。
3. 解释串行调度和可串行调度的区别。
串行调度指事务的调度是串行的,不可并发。可串行调度指事务并发调度的结果冲突等价于事务串行调度,事务并发调度对事务的执行结果没有影响。
4. 请给出一个包含两个事务的可串行化调度的示例,使得事务提交的顺序与串行化顺序不同。
T1 | T2 |
READ(A) | |
WRITE(A) | |
READ(A) | |
WRITE(A) | |
READ(B) | |
WRITE(B) | |
READ(B) | |
WRITE(B) |
5. 考虑以下两个事务:
T13:
read(A);
read(B);
if A = 0 then B := B + 1;
write(B).
T14:
read(B);
read(A);
if B = 0 then A := A + 1;
write(A).
现在的一致性要求是 A = 0 ∨ B = 0,初始值为 A = B = 0。
a. 证明涉及这两个事务的每个串行执行都保持数据库的一致性。
b. 设计一个 T13 和 T14 的并发执行,产生一个不可串行化的调度。
c. 是否存在 T13 和 T14 的并发执行产生可串行化的调度?
a. 若先执行事务T13,再执行事务T14,,则执行完事务T13后,A=0,B=1,执行完事务T14后,A=1,B=1;若先执行事务T14,再执行事务T13,,则执行完事务T14后,A=1,B=0,执行完事务T13后,A=1,B=1。
b.
T13 | T14 |
READ(A) | |
READ(B) | |
READ(B) | |
READ(A) | |
WRITE(A) | |
WRITE(B) |
由于T14的READ(B)先于T13的WRITE(B),所以T14优先于T13,由于T13的READ(A)先于T14的WRITE(A),所以T13优先于T14,故T13与T14的优先图构成环,故该调度是一个不可串行化的调度。
c.
不存在。反证法:若存在,则T13的WRITE(B)应当晚于T14的READ(B),否则为先执行T13再执行T14的串行调度,故T13优先于T14。同理,T14的WRITE(A)应当晚于T13的READ(A),否则为先执行T14再执行T13的串行调度,故T14优先于T13。所以,T13与T14的优先图构成环,故不存在T13 和 T14 的并发执行产生可串行化的调度