閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內(nèi)。
【說明】
某銀行的存款業(yè)務分為如下三個過程:
(1)讀取當前帳戶余額,記為R(b);
(2)當前余額b加上新存入的金額x作為新的余額b,即b = b + x;
(3)將新余額b寫入當前帳戶,記為W(b)。
存款業(yè)務分布于該銀行各營業(yè)廳,并允許多個客戶同時向同一帳戶存款,針對這一需求,完成下述問題。
【問題1】(5分)
假設同時有兩個客戶向同一帳號發(fā)出存款請求,該程序會出現(xiàn)什么問題?(100字以內(nèi))
【問題2】(5分)
存款業(yè)務的偽代碼程序為 R(b), b = b + x, W(b)。現(xiàn)引入共享鎖指令SLock(b)和獨占鎖指令XLock(b)對數(shù)據(jù)b進行加鎖,解鎖指令Unlock(b)對數(shù)據(jù)b進行解鎖。
請補充上述存款業(yè)務的偽代碼程序,使其滿足2PL協(xié)議。
【問題3】(5分)
若用SQL語句編寫的存款業(yè)務事務程序如下:
……
START TRANSACTION;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE Accounts
SET CurrentBalance = CurrentBalance + Amount
WHERE AccountID = AccountNo;
COMMIT;
……
其中:Accounts為帳戶表,CurrentBalance為當前余額,Amount為新存入的金額,AccountNo為外部輸入的帳戶編碼。
該事務程序能否正確實現(xiàn)并發(fā)的存款業(yè)務?如果不能,請說明原因,應做怎樣的修改?(100字以內(nèi))