事务并发操作

来源:百度知道 编辑:UC知道 时间:2024/07/12 14:07:07
设有两个事务T1和T2,其并发操作序列如下所示,下列说法中正确的是:( )
步骤:T1 T2
1 读A=100
2 A=200写回
3 读A=200
4 A=300写回
A.该操作序列不存在问题
B.该操作序列丢失修改
C.该操作序列不能重复读
D.该操作序列读出“脏”数据

D

这个操作显然存在问题,故A不能成立
这里的修改只涉及了T2事务中的两个写回操作,T2是一个独立的事务,因些其事务本身是存在原子性的,不能丢失修改,A=200也同时会发生正确的写回,显然不存在丢失修改.故B不能成立
C至于读取方法,可以随便的读取的,显然可以重复读的.
D,可以看出整个事务完成后,你不知道T1事务的数据是来源于何处,当然,他出现的”脏读”.所以D是正确的.
事务上一般为保证其原子性,发生T2时读A时并不能数据进行锁定,而是在写入时一定要发生锁定的,且是一个读写锁定,不能再允许其他事务读数据以防发生脏读.这就是T2事务没有设置A数据的读写锁定而致的.

所以,如果T1事务有写回操作时,就该将A数据进行一次读写锁定,而T2也是一样的.如:
T2在A=200写回前进行一定读写锁定,至到A=300后进行一次读写开放,则这个T1与T2序列就不会这样发生的,它只可能在T2的A=100前后进行读取,或者在A=300写回后进行读取,这样从原子性上来说,T1就好像是在T2事务发生前或后进行的读写,而从程序序列上来说,T1的读取却可能发生在T2的A=100读取之后进行读取,完全两个事务是并发执行的!这就是事务的各种特性!