希赛网为大家整理了2017上半年数据库系统工程师考试案例分析真题,以下为第五部分。
试题五(共15分)
阅读下列说明,回答问题1和问题2,将解答填入答题纸的对应栏内。
【说明】
某抢红包软件规定发红包人可以一次抛出多个红包,由多个人来抢。要求每个抢红包的人最多只能抢到同一批次中的一个红包,且存在多个人同时抢同一红包的情况。给定的红包关系模式如下:
Red(ID,BatchID,SenderID,Money,ReceiverID)
其中ID标识每一个红包;BatchID为发红包的批次,一个BatchID值可以对应多个ID值;SenderID为发红包人的标识;Money为红包中的钱数;ReceiverID记录抢到红包的人的标识。
发红包人一次抛出多个红包,即向红包表中插入多条记录,每条记录表示一个红包,其ReceiverID值为空值。
抢某个红包时,需要判定该红包记录的ReceiverID值是否为空,不为空时表示该红包己被抢走,不能再抢,为空时抢红包人将自己的标识写入到ReceiverID宇段中,即为抢到红包。
【问题1】(9分)
引入两个伪指令a=R(X)和W(b,X)。其中a=R(X)表示读取当前红包记录的ReceiverID字段(记为数据项X)到变量a中,W(b,X)表示将抢红包人的标识b的值写入到当前红包记录的ReceiverID字段(数据项X)中,变量a为空值时才会执行W(b,X)操作。假设有多个人同时抢同一红包(即同时对同一记录进行操作),用aj=Rj(X)和Wi(bi,X)表示系统依次响应的第i个人的抢红包操作。假设当前数据项X为空值,同时有三个人抢同一红包,则
(1)如下的调度执行序列:
aJ=RJ(刻,a2=R2(X),Wj(bj,X),W2仇,刻,a3=R3(X)
抢到红包的是第几人?并说明理由。
(2)引入共享锁指令SLockj(X)、独占锁指令XLock i(X)和解锁指令ULock i(X),其中下标i表示第i个抢红包人的指令。如下的调度执行序列:
SLockj(X),aj=Rj(X),SLock2(X),a2=R2(X),XLockj(X)......
是否会产生死锁?并说明理由。(3)为了保证系统第一个响应的抢红包人为最终抢到红包的人,请使用上述。)中
引入的锁指令,对上述(1)中的调度执行序列进行修改,在满足2PL协议的前提下,给出一个不产生死锁的完整的调度执行序列。
【问题2】(6分)
下面是用SQL实现的抢红包程序的一部分,请补全空缺处的代码CREATE PROCEDURE ScrambleRed(IN Batchl词。VARCHAR(20),
因RecvrNo VARCHAR仰))
--红包批号一接收红包者--是否已抢过此批红包
if exists(SELECT*FROM Red
WHERE BatchID=BatchNo AND ReceiverID=ReçvrNo)也m
return-1,;
读取此批派发红包中未领取的红包记录ID
DECLARENonR vedRedCURSORFOR SELECTID'>
FROMRed
WHERE BatchID=BatchNo AND ReceiverID IS NULL;
-打开游标
OPEN NonRecvedRed;
FETCH NonRecvedRed INTO NonRecvedNo;
while not error
一抢红包事务
BEGIN TRANSACTION;
H写入红包记录
UPDATE RED STE RECDIVER ID=RecvrNo
WHERE ID=nonRECVED AND(a)
//执行状态判定
If(修改的记录数)=1 THEN
COMMIT
(B);
Return 1’
Else
ROLLBACK
End if
(c)
End while
关闭游标
CLOSE NnoRecved RD
Return0;
END
>>>>返回目录:2017上半年数据库系统工程师考试案例分析真题(汇总)
>>>>进入估分:2017上半年软考分数早知道,在线估分+真题解析
>>>>点击查看:2017上半年数据库系统工程师考试案例分析真题答案和解析