2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)

上传人:cl****1 文档编号:476899684 上传时间:2023-08-17 格式:DOCX 页数:14 大小:19.60KB
返回 下载 相关 举报
2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)_第1页
第1页 / 共14页
2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)_第2页
第2页 / 共14页
2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)_第3页
第3页 / 共14页
2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)_第4页
第4页 / 共14页
2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)》由会员分享,可在线阅读,更多相关《2022软件水平考试-中级数据库系统工程师考试全真模拟卷13(附答案带详解)(14页珍藏版)》请在金锄头文库上搜索。

1、2022软件水平考试-中级数据库系统工程师考试全真模拟卷(附答案带详解)1. 问答题:某汽车租赁公司建立汽车租赁管理系统,其数据库的部分关系模式如下:用户: USERS( Userid,Name, Balance),各属性分别表示用户编号、姓名、余额;汽车:CARS(Cid, Ctype, CPrice,CStatus)各属性分别表示汽车编号、型号、价格(日租金)、状态;租用记录: BORROWS(BRid, Userid,Cid, STime, ETime),各属性分别表示租用编号、用户编号、汽车编号、租用时间、归还时间;不良记录:BADS(Bid, UseridBRid, BTime),各

2、属性分别表示不良记录编号、用户编号、租用编号、不良记录时间。相关关系模式的属性及说明如下(1)用户租用汽车时,其用户表中的余额不能小于500,否则不能租用。(2)汽车状态为待租和已租,待租汽车可以被用户租用,已租汽车不能租用。(3)用户每租用一次汽车,向租用记录中添加一条租用记录,租用时间默认为系统当前时间,归还时间为空值,并将所租汽车状态变为已租。用户还车时,修改归还时间为系统当前时间,并将该汽车状态改为待租。要求用户不能同时租用两辆及以上汽车.(4)租金从租用时间起按日自动扣除.根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。【问题1】(4分)请将下面建立租用记录表的SQL语句

3、补充完整,要求定义主码完整性约束和引用完整性约束。CREATE TABLE BORROWS(BRID CHAR(20) (a) ,UserId CHAR(10) (b) ,Cld CHAR(10) (c) ,STime DATETIME (d) ,ETime DATETIME,);【问题2】(4分)当归还时间为空值时,表示用户还未还车,系统每天调用事务程序从用户余额中自动扣除当日租金,每个事务修改一条用户记录中的余额值。由用户表上的触发器实现业务:如用户当日余额不足,不扣除当日租金,自动向不良记录表中加入一条记录,记录中的BId取值由 UserId系统当前日期构成, Btime采用 GETDA

4、TE()函数取系统当前时间。补全创建触发器Bad_TRG的SQL语句。CREATE TRIGGER Bad_TRG (e) UPDATE of Balance ON USERSReferencing new row as nrowFor each row When nrow.Balance 0 BEGIN (f) ; /插入不良记录INSERT INTO BADS SELECT CONCAT(BORROWs. UserId, CONVERT(varchar(100), GETDATE(), 10), BORROWS UserId, BRID, (g) / CONVERT()函数将日期型数据改为

5、字符串型 / CONCAT()函数实现字符串拼接 FROM BORROWS WHERE (h) AND ETime IS NULL; END【问题3】(4分)不良记录是按日记录的,因此用户一次租车可能会产生多条不良记录。创建不良记录单视图 BADS_Detail,统计每次租车产生的不良记录租金费用总和大于200的记录,属性有 UserId、Name、BRId、CId、 Stime、 Etime和 total(表示未缴纳租金总和)。补全创建视图 BADS_Detail的SQL语句。CREATE VIEW (i) AS SELECT BADS. UserId, USERS. Name, BADS.

6、BRId, CARS. Cld, Stime, Etime, (j) AS total FROM BORROWS,BADS, CARS, USERS WHERE BORROWS.BRId=BADS. BRId AND BORROWS.Cid=CARS. Cld AND (k) =BADS. UserId GROUP BY BADS. UserId, USERS. Name, BADS.BRID, CARS. CId, Stime, Etime HAVING (l) ; 【问题4】(3分)查询租用了型号为“A8”且不良记录次数大于等于2的用户,输出用户编号、姓名,并按用户姓名降序排序输出。SEL

7、ECT USERS. UserId, NameFROM USERS,BORROWS, CARSWHERE USERS. UserId= BORROWS. UserId AND BORROWS.Cid= CARS. CId AND (m) AND EXISTS( SELECT * FROM BADS WHERE BADS. UserId=BORROWS.UserId AND (n) GROUP BY UserId HAVING COUNT(*)= 2) ORDER BY (O) ;答案: 本题解析:【问题1】(a) PRIMARY KEY(b) REFERENCES USERS(UserId)(

8、c) REFERENCES CARS(CId)(d) DEFAULTGETDATE()【问题2】(e) after(f) rollback(g) GETDATE()(h) BORROWS.UserId= nrow.UserId【问题3】(i) DADS_Detail(userid,name,brid,cid,stime,etime,toltal)(j) sum(cars.CPrice)(k) USERS.UserId(l) sum(CARS.CPrice) 200【问题4】(m) CARS.Ctype = A8 (n) BADS.BRId = BORROWS.BRId (o) Name DES

9、C 2. 问答题:某连锁酒店提供网上预订房间业务,流程如下:(1)客户查询指定日期内所有类别的空余房间数,系统显示空房表(日期,房间类别,数量)中的信息。(2)客户输入预订的起始日期、结束日期、房间类别和数量,并提交。(3)系统将用户提交的信息写入预订表(身份证号,起始日期,结束日期,房间类别,数量),并修改空房表的相关数据。【问题1】如果两个用户同时查询相同日期和房间类别的空房数量,得到的空房数量为1,并且这两个用户又同时要求预订,可能会产生什么结果,请用100字以内的文字简要叙述。【问题2】引入如下伪指令:将预订过程作为一个事务,将查询和修改空房表的操作分别记为R(A)和W(A,x),插入

10、预订表的操作记为W(B,a),其中x代表空余房间数,a代表预订房间数,则事务的伪指令序列为:x=R(A),W(A,x-a),w(B,a)。在并发操作的情况下,若客户1、客户2同时预订相同类别的房间时,可能出现的执行序列为:x1=R(A),x2=R(A),W(A,x1-a1),W(B1,a1),W(A,x2-a2),W(B2,a2)。(1)此时会出现什么问题,请用100字以内的文字简要叙述。(2)为了解决上述问题,引入共享锁指令SLock(X)和独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)对数据X进行解锁,请补充上述执行序列,使其满足2PL协议,不产生死锁且持有锁的时间

11、最短。【问题3】下面是实现预订业务的程序,请补全空缺处的代码。其中主变量:Cid、:Bdate、:Edate、:Rtype、:Num分别代表身份证号、起始日期、结束日期、房间类别和订房数量。SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; UPDATE 空房表 SET 数量=数量-:Num WHERE (a) ; if error then ROLLBACK; return -1; INSERT INTO 预订表 VALUES (:cid, :Bdate, :Edate, :Rtype, :Num); if error then ROLLBACK

12、; return -2; (b)答案: 本题解析:1、同时预订时,可能会产生一个客户订不到或者把同一房订给两个客户依题意,如果两个用户同时要求预订相同日期和相同类别的同一个房间,则可能会产生一个客户订不到房间或者把同一房间预订给两个客户的冲突现象。2、(1)出现问题:丢失修改,客户1预订a1数量房间后,对空房数量的修改被T2的修改覆盖,造成数据不一致。(2)XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),UNLOCK(B),XLOCK(A),x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),W(B2,a2

13、),UNLOCK(B)若对并发事务的指令交叉执行不加以控制,则会使每个事务的执行结果相互干扰,破坏事务的隔离性,从而造成数据库的不一致。本试题中,客户1预订a1数量房间后,对空房数量的修改可能被客户2的修改所覆盖,造成不能体现出客户1已预订的房间数量。该现象属于丢失修改造成的数据库不一致性。在并发状态下,可能会相互干扰破坏事务的ACID属性,加锁机制是保障事务正确执行的一种机制。2PL协议能够保证事务在并发状态下调度的正确性,即可串行化的调度。针对题干所给出的客户f的房间预订伪指令序列:x=R(A),W(A,x-a),W(B,a),需要在修改房间数量之前加XLock()指令,并保证读/写锁不交

14、叉,即确保客户1释放A上的锁之后客户2才能执行加锁操作。重写后的房间预订伪指令序列如下。XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),UNLOCK(B),XLOCK(A),x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),W(B2,a2),UNLOCK(B)3、房间类别=:Rtype AND 日期 BETWEEN :Bdate AND :Edate COMMIT :retum 0;SQL语句SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;是SQL提供的事务隔离级别之一。它表示只允许事务读已提交的数据,并且在两次读同一数据时不允许其他事务修

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号