摘要:希賽網(wǎng)軟考頻道小編為大家整理了2019年數(shù)據(jù)庫(kù)系統(tǒng)工程師下午真題第五部分,供大家參考。
5、閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】
某商業(yè)銀行賬務(wù)系統(tǒng)的部分關(guān)系模式如下:
賬戶表:Account (ano, aname, balance),其中屬性含義分別為:賬戶號(hào)碼,賬戶名稱和賬戶余額。
交易明細(xì)表:TranDetails (too, ano, ttime, toptr, amount, ttype),其中屬性分別為:交易編號(hào),賬戶號(hào)碼,交易時(shí)間,交易操作員,交易金額,交易類型(1-存款,2-取款,
3-轉(zhuǎn)賬)。
余額匯總表:AcctSums (adate, atime, allamt),其中屬性分別為:匯總?cè)掌?,匯總時(shí)間,總余額。
常見的交易規(guī)則如下:
存/取款交易:操作員核對(duì)用戶相關(guān)信息,在系統(tǒng)上執(zhí)行存/取款交易。賬務(wù)系統(tǒng)増加/ 減少該賬戶余額/并在交易明細(xì)表中增加一條存/取款交易明細(xì)。
轉(zhuǎn)賬交易:操作員核對(duì)用戶相關(guān)信息,核對(duì)轉(zhuǎn)賬交易賬戶信息,在系統(tǒng)上執(zhí)行轉(zhuǎn)賬交易。賬務(wù)系統(tǒng)對(duì)轉(zhuǎn)出賬戶減少其賬戶余額,對(duì)轉(zhuǎn)入賬戶增加其賬戶余額,并在交易明細(xì)表中增加一條轉(zhuǎn)賬交易明細(xì)。
余額匯總交易:將賬戶表中所有賬戶余額累計(jì)匯總。
假定當(dāng)前賬戶表中的數(shù)據(jù)記錄如表5-1所示。
問題內(nèi)容:
請(qǐng)根據(jù)上述描述,回答以下問題。
【問題1】(3分)
假設(shè)在正常交易時(shí)間,賬戶上在進(jìn)行相應(yīng)存取款或轉(zhuǎn)賬操作時(shí),要執(zhí)行余額匯總交易。下面是用SQL實(shí)現(xiàn)的余額匯總程序,請(qǐng)補(bǔ)全空缺處的代碼。要求(不考慮并發(fā)性能)在 保證余額匯總交易正確性的前提下,不能影響其他存取款或轉(zhuǎn)賬交易的正確性。
CREATE PROCEDURE AcctSum(OUT: Amts DOUBLE)
BEGIN
SET TRANSACTION ISOLATION LEVEL( );
BEGIN TRANSACTION;
SELECT sum(balance) INTO : Amts FROM Accounts;
if error// error是由DBMS提供的上一句SQL的執(zhí)行狀態(tài)
BEGIN
ROLLBACK;
return -2;
END
INSERT INTO AcctSums
VALUES (getDATE(), getTIME(), ( ));
if error // error是由DBMS提供的上一句SQL的執(zhí)行狀態(tài)
BEGIN
ROLLBACK;
return-3;
END
( );
END
【問題2】(8分)
引入排它鎖指令LX()和解鎖指令UX(),要求滿足兩段鎖協(xié)議和提交讀隔離級(jí)別。假設(shè)在進(jìn)行余額匯總交易的同時(shí),發(fā)生了一筆轉(zhuǎn)賬交易。從101賬戶轉(zhuǎn)給104賬戶400元。 這兩筆事務(wù)的調(diào)度如表5-2所示。
(1)請(qǐng)補(bǔ)全表中的空缺處(a)、(b);
(2)上述調(diào)度結(jié)束后,匯總得到的總余額是多少?
(3)該數(shù)據(jù)是否正確?請(qǐng)說明原因。
【問題3】(4分)
在【問題2】的基礎(chǔ)上,引入共享鎖指令LS0和解鎖指令US()。對(duì)【問題2】中的調(diào)度進(jìn)行重寫,要求滿足兩段鎖協(xié)議。兩個(gè)事務(wù)執(zhí)行的某種調(diào)度順序如表'5-3所示,.該調(diào)度順序使得匯總事務(wù)和轉(zhuǎn)賬事務(wù)形成死鎖。請(qǐng)補(bǔ)全表中的空缺處(a)、(b)。
相關(guān)推薦:2019年數(shù)據(jù)庫(kù)系統(tǒng)工程師下午真題及答案
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題