试题五(共15分)阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。[说明]假设有两项业务对应的事务T1、T2与存款关系有关:. 转账业务:T1(A,B,50),从账户A向账户B转50元;. 计息业务:T2,对当前所有账户的余额计算利息,余额为X*l.01针对上述业务流程,回答下列问题:
[问题1](3分)假设当前账户A余额为100元,账户B余额为200元。有两个事务分别为T1(A,B,50),T2,一种可能的串行执行为:T1(A,B,50)->T2 结果:A=50.5B=252.5 A+B=303请给出其他的串行执行次序和结果。
参考答案:T2->T1(A,B,50) 结果: A=51 B=252 A+B=303
解析:本题考查对事务设计、并发控制的理解和掌握。 两个事务T1、T2的串行执行只有两种方式:Tl执行完执行T2(记为:T1->T2)和T2执行完执行Tl(记为:T2->T1),结合A、B的初值,即可计算出T2->Tl的执行结果。 根据A、B的初值,按照给定的调度,获得执行结果为:A=50.5,B=252,与任何一个串行执行的结果都不同,为错误的调度,事实上会造成储户的无端损失。 引入两段锁协议后可保证调度的正确。根据锁类型和加解锁的要求,本题中所有的读取随后即要修改,对应了SQL中的UPDATE指令,可直接加X锁,具体参见参考答案:。 若将计息业务T2改为对单个账户的余额计算利息,根据提示的情况,调度结果可能存在不一定性,这样的事务设计是错误的。