设有两个事务T1和T2,其并发操作序列如下表所示。下列说法中正确的是( )。
T1 | T2 |
读A=100 | |
A=A*2写回 | |
读A=200 | |
ROLLBACK |
A.该操作序列不存在问题
B.该操作序列丢失修改
C.该操作序列不能重复读
D.该操作序列读出脏数据
参考答案:D
解析: 事务的并发执行可能出现3个主要问题;
①丢失更新。即两个事务对同一数据进行读取并修改,先做的那个修改动作被后面的修改掩盖了,又称为丢失修改。
②对未提交更新的依赖。即事务T1读取了一个事务T2正在更新但尚未提交的数据,这个数据是一个数据库中并不存在的值。也就是俗称的读“脏”数据。
③不一致的分析。假设事务T1要对账户求和,先读了账户1余额,此时事务T2将钱从账户1转到账户2,事务T2提交后事务T1继续执行,读取账户2的余额加到总数中,显然转走的钱被算了两次。这就是不一致的分析,又称不可重复读。
在本题中,T2在T1更新数据的过程中读取了数据,但之后T1执行了回滚操作,因此T2读到了脏数据。