事务并发操作

2024-11-26 16:43:44
推荐回答(1个)
回答1:

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读取之后进行读取,完全两个事务是并发执行的!这就是事务的各种特性!