閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內。
【說明】
某銀行的轉帳業(yè)務分為如下兩類操作:
(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)。
針對上述業(yè)務及規(guī)則,完成下列問題:
【問題1】(5 分)
根據(jù)業(yè)務規(guī)則,轉帳業(yè)務要么被全部執(zhí)行,要么全部不執(zhí)行,應如何保障?假設參與轉帳的帳戶余額有大于等于0的約束,上述偽代碼執(zhí)行中可能出現(xiàn)什么情況,應如何處理?(100字以內)
【問題2】(5分)
若允許對同一帳號同時進行轉帳,要保證轉帳程序的并發(fā)執(zhí)行,引入共享鎖指令SLock(b)和獨占鎖指令XLock(A)對數(shù)據(jù)A 進行加鎖,解鎖指令Unlock(A)對數(shù)據(jù)A 進行解鎖。
請補充上述轉帳業(yè)務的偽代碼序列,使其滿足2PL協(xié)議。
【問題3】(5 分)
若用SQL語句編寫的轉帳業(yè)務事務程序如下:
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為新存入的金額。
該事務程序能否保證數(shù)據(jù)的一致性?如不能,請說明原因并改正。(100字以內)