当前位置:首页计算机类软件水平考试中级数据库系统工程师->某图书馆图书借还业务使用如下关系模式:书目(ISBN,书名,

某图书馆图书借还业务使用如下关系模式:书目(ISBN,书名,出版社,在库数量)图书(书号,ISBN,当前位置)其中在库数量为当前书目可借出图书数量,每本图书入库后都会有当前位置,借出后当前位置字段改为空值。每一条书目信息对应多本相同图书,每一本图书只能对应一条书目。借还书业务基本流程如下描述:

(1)读者根据书名查询书目,当前书目在库数量大于0时可借阅。

(2)读者借出一本图书时,进行出库操作:根据该图书书号将该图书当前位置字段值改为空值,并根据其ISBN号将对应书目在库数量减1。

(3)读者归还一本图书时,进行入库操作:系统根据当前书架空余位置自动生成该本书存放位置,并根据该图书书号将其当前位置字段值改为生成存放位置,然后将对应书目在库数量加1。

(4)借还书时,逐一扫描每本图书书号并进行出、入库操作。

【问题1】引入两个伪指令:a=R(X)表示将在库数量X值读入到变量a中;W(a,X)表示将变量a值写入到在库数量X中。入库操作用下标i表示,出库操作用下标o表示。将出库和入库操作分别定义为两个事务,针对并发序列:ao=Ro(X),aI=RI(X),ao=ao-1,Wo(ao,X),aI=aI+1,WI(aI,X)。其中变量aI和ao分别代表入库事务和出库事务中局部变量。

(1)假设当前X值为3,则执行完上述并发序列伪指令后,X值是多少?简述产生这一错误原因(100字以内)。

(2)为了解决上述问题,引入独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)两对数据X进行解锁。入库操作用下标I表示,如XLockI(X);出库操作用下标o表示,如Unlocko(X)。请根据上述并发序列,给出一种可能执行序列,使其满足2PL协议。

【问题2】下面是用SQL实现出入库业务程序一部分,请补全空缺处代码。CREATE PROCEDURE IOstack(IN BookNo VARCHAR(20), IN Amount INT){ //输入合法性验证 if not (Amount=1 or Amount=-1) return-1; //修改图书表当前位置 UPDATE图书SET当前位置=GetPos(BookN,Amount)//系统生成 WHERE ____(a)_____;if error then { ROLLBACK; return -2;}//修改在库数量UPDATE 书目 SET 在库数量=____(b)______ WHERE EXISTS(SELECT * FROM 图书WHERE 书号=BookNo AND ____(c)____ );if error then ( ROLLBACK; return-3;} ____(d)______;return 0;}

答案:
本题解析:

【问题1】本题考查事务并发控制知识应用和事务程序编写技能。

(1)根据问题中给出并发序列:"ao=Ro(X),aI=RI(X),ao=ao-1,Wo(ao,X),aI=aI+1,WI(aI,X)"及指令说明,该序列为一个入库事务和一个出库事务余发调度。

X当前值为3,执行完"ao=Ro(X),aI=RI(X)"后,变量ao和aI值均为3;执行完"ao=ao-1,Wo(ao,X)"后,X值被改为2;执行完"aI=aI+1,WI(aI,X)"后,X值被改为4,即并发序列执行完后X值。

这两个事务分别是同一书目下两本书出库和入库操作。根据事务并发正确性判定,其正确必要条件是与某一次串行结果相同。在X当前值为3情况下,出库一本书和入库一本书,两个事务两种串行方式下,其结果都为3。

因而题目给出并发序列执行结果是错误。错误原因在于出库事务指令"Wo(ao,X)"写入X值后,被入库事务指令加"WI(aI,X)"所覆盖,即丢失修改错误,出库事务修改丢失了。

(2)根据2PL协议规定,在修改数据前需对该数据加独占锁,前提是在该数据上没有其他事务所加锁,否则只能等待其他事务释放锁后再加锁。

题目要求只加独占锁,因此出库事务第一条语句"ao=Ro(X)"前应有加锁语句"XLocko(X)";入库事务第一条指令"aI=RI(X)"之前应有加锁语句"XLockI(X)",但此时X上己有出库事务上锁,故入库事务加锁被拒绝,只能等待,到出库事务释放锁之后才能加上锁,入库事务后续指令才能得以执行。

【问题2】本问题将出入库两项操作使用同一程序完成,通过形参Amount值(1表示入库,-1表示出库)进行区别。空缺U)处应根据形参BookNo值确定要修改图书记录。空缺(b)处为新在库数量值,将形参Amount值累加到在库数量上即可。空缺(c)处要通过当前图书记录确定要修改书目记录。空缺(d)处应为提交指令。

更新时间:2022-07-24 19:35
纠错

你可能感兴趣的试题

单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S2)和P(S4)
  • B.P(S2)和V(S4)
  • C.P(S2)和P(S4)
  • D.V(S2)和V(S4)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S1)P(S2)和V(S3)
  • B.P(S1)V(S2)和V(S3)
  • C.V(S1)V(S2)和V(S3)
  • D.P(S1)P(S2)和V(S3)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S4)和V(S4)V(S5)
  • B.V(S5)和P(S4)P(S5)
  • C.V(S3)和V(S4)V(S5)
  • D.P(S3)和P(S4)V(P5)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S3)和V(S4)V(S5)
  • B.V(S3)和P(S4)P(S5)
  • C.P(S3)和P(S4)P(S5)
  • D.V(S3)和V(S4)V(S5)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.P(S2)和P(S4)
  • B.P(S2)和V(S4)
  • C.V(S2)和P(S4)
  • D.V(S2)和V(S4)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.V(S1)、P(S1)和V(S2)V(S3)
  • B.P(S1)、V (S1)和V(S2)V(S3)
  • C.V(S1)、V(S2)和P(S1)V(S3)
  • D.P(S1)、V(S2)和V(S1)V(S3)
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.序列图
  • B.状态图
  • C.通信图
  • D.活动图
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.合并分叉
  • B.分支
  • C.合并汇合
  • D.流
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.产甲2套,乙3套
  • B.生产甲1套,乙4套
  • C.生产甲3套,乙4套
  • D.生产甲4套,乙2套
查看答案
单选题

高级系统分析师,专项练习,软件水平考试《高级系统分析师》押题

  • A.见图A
  • B.见图B
  • C.见图C
  • D.见图D
查看答案