列表

详情


阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某银行的转帐业务分为如下两类操作:
(1)读取帐户A 余额到变量x,记为x = R(A);
(2)将变量x值写入帐户A 中的余额,记为W(A, x)。 
 从帐户A 向帐户B 转帐金额x元的伪代码操作序列为:a = R(A), a = a-x, W(A, a), b = R(B), b = b+x, W(B,b)。
针对上述业务及规则,完成下列问题:

【问题1】(5 分)
根据业务规则,转帐业务要么被全部执行,要么全部不执行,应如何保障?假设参与转帐的帐户余额有大于等于0的约束,上述伪代码执行中可能出现什么情况,应如何处理?(100字以内)
【问题2】(5分)
若允许对同一帐号同时进行转帐,要保证转帐程序的并发执行,引入共享锁指令SLock(b)和独占锁指令XLock(A)对数据A 进行加锁,解锁指令Unlock(A)对数据A 进行解锁。
请补充上述转帐业务的伪代码序列,使其满足2PL协议。
【问题3】(5 分)
若用SQL语句编写的转帐业务事务程序如下:
START TRANSACTION;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
UPDATE  Accounts
SET CurrentBalance = CurrentBalance - Amount
WHERE AccountID = A;
if error then  ROLLBACK;  
COMMIT;
UPDATE  Accounts
SET CurrentBalance = CurrentBalance + Amount
WHERE AccountID = B;
if error then  ROLLBACK;  
COMMIT;
其中:Accounts为帐户表,CurrentBalance为当前余额,Amount为新存入的金额。 
该事务程序能否保证数据的一致性?如不能,请说明原因并改正。(100字以内)

参考答案:

详细解析:

上一题