在并发事务中提交

时间:2014-08-23 17:38:53

标签: database concurrency commit

并发事务执行。

 T1         T2 
================= 
           R(A)

R(A)       
A=A+100      
W(A)       
           A=A+200
           W(A)
           commit

commit

这里最初A = 100。最终提交后A的价值是多少? 注意:上述交易计划同时执行(Inter-leaved),如图所示。

1 个答案:

答案 0 :(得分:1)

取决于锁定策略,有两种可能性:

  1. 使用乐观锁定,T2将向DB提交值300,T1将获得乐观锁定异常

  2. 使用行或表级别锁定并假设T2首先获得锁定,然后A = 400。这是因为T2首先获得锁定,然后T1将阻塞直到T2完成。 T2因此提交A = 300。 T1然后读取该值并提交A = 400。显然,在这种情况下,操作不会如图所示进行交错。

  3. 还有第三种可能性,T1可以先获得锁定。在这种情况下,T1不能在T2之后提交,因此根据你的图表它是不可能的。