数据库理论10

数据库理论作业10

14.15

考虑下面两个事务:
$$
\begin{aligned}
T_{13}:&read(A);\\
&read(B);\\
&if\ A = 0 \ then\ B:=B+1\\
&write(B);
\end{aligned}
$$

$$
\begin{aligned}
T_{14}:&read(B);\\
&read(A);\\
&if\ B=0
\ then\ A:=A+1;\\
&write(A).
\end{aligned}
$$

设一致性需求为$A=0\vee B=0$,初值是$A=B=0$。

a. 说明包括这两个事务的每一个串行执行都保持数据库的一致性。

答:当先执行$T_{13}$再执行$T_{14}$时,情况如下:

过程 A B
初始值 0 0
$T_{13}$之后 0 1
$T_{14}$之后 0 1

完全执行完成之后,此时$A=0\vee B=0\equiv{False\vee True}\equiv True$

当先执行$T_{14}$再执行$T_{13}$时,情况如下:

过程 A B
初始值 0 0
$T_{14}$之后 1 0
$T_{13}$之后 1 0

完全执行完成之后,此时$A=0\vee B=0\equiv{True\vee False}\equiv True$

b.给出$T_{13}$和$T_{14}$的一次并发执行,执行产生不可串行化调度。

答:执行顺序如下:

步骤 $T_{1}$ $T_{2}$
$1$ $read(A);$
$2$ $read(B);$
$3$ $read(A);$
$4$ $read(B);$
$5$ $if\ A = 0 \ then\ B:=B+1;$
$6$ $if\ B=0\ then\ A:=A+1;$
$7$ $write(B)$
$8$ $write(A)$

c.存在产生可串行化调度的$T_{13}$和$T_{14}$的并发执行吗?

答:不存在。

比如说当$T_{13}$先执行了$read(A)$之后,此时在该进程中就会认为$A$一直等于$1$,在这个情况下无论之后执行顺序是怎么样的,$T_{13}$都会得到$B=1$的结果。而另一个进程$T_{14}$则有可能导致$A=1$也有可能导致$A=0$。若$A=1$了就会导致不满足题目要求的一致性需求,故不存在可串行化的并发执行。