ETime DATETIME, );
【问题 2】(4 分)
当归还时间为空值时,表示用户还未还车,系统每天调用事务程序从用户余额中自动扣除当日租金,每个事务修改一条用户记录中的余额值。由用户表上的触发器实现业务:如用户当日余额不足,不扣除当日租金,自动向不良记录表中加入一条记录,记录中的 BId 取值由 UserId+系统当前日期构成, Btime 采用 GETDATE()函数取系统当前时间。补全创建触发器 Bad_TRG 的 SQL 语句。 CREATE TRIGGER Bad_TRG (e) UPDATE
of Balance ON USERS
Referencing new row as nrow
For each row
When nrow.Balance< 0
BEGIN
(f)
//插入不良记录 INSERT INTO BADS
;
BRID,
SELECT CONCAT(BORROWs. UserId, CONVERT(varchar(100),
GETDATE(), 10)), BORROWS UserId, (g)
// CONVERTO 函数将日期型数据改为字符串型
//CONCATO 函数实现字符串拼接
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.BRId,
CARS. Cld, Stime, Etime,
(j)
=BADS.
UserId
GROUP BY BADS. UserId, USERS. Name, BADS.BRID, CARS. CId,
Stime, Etime
HAVING (1) ;
【问题 4】(3 分)
FROM BORROWS BADS. CARS. USERS
WHERE BORROWS.BRId=BADS. BRId
AND BORROWS.Cid=CARS. Cld
AND (k)
AS total
查询租用了型号为“A8”且不良记录次数大于等于 2 的用户,输出用户编号、姓名,
并按用户姓名降序排序输出。 SELECT USERS. UserId, Name FROM USERS,BORROWS, CARS
WHERE USERS. UserId= BORROWS. UserId AND BORROWS.Cid= CARS. CId
AND (m) AND EXISTS( SELECT * FROM BADS
WHERE BADS. UserId=BORROWS.UserId
(n)
GROUP BY UserId ORDER BY (0)
AND
HAVING COUNT(*)>= 2) ;
● 试题五(共 15 分)
阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。 【说明】
某超市销售系统的部分关系模式如下
商品表: Commodity(Ccode, Cname, price,qty),其中属性含义分别为:商品编号、商品名称、价格、库存量,有专门的事务保证库存量足够大,销售时无需检测。 销售表: Sale(Sno,Ccode, amount, Stime),其中属性含义分别为:销售编号,商品编号、数量、时间。
其销售业务规则如下:顺客在超市挑选好商品后,带商品到结算处结算付款,结算处有多名结算员使用多台机器进行结算。结算员负责扫顾客购买商品的条码和数量,由系统后台结算程序计算出顺客购买商品的总金额,修改商品表的商品库存量,并将销售信息写入销售表。请根据上述描述,回答以下问题。
【问题 1】(3 分)
假设有两个顾客同时购买同一条码的商品,结算事务修改该商品的库存量(记为数据项 X)部部分的调度如图 5-1 所示。
如果购买前 X 的初值为 10,则上述调度执行完成后,X 的值是多少?属于哪一类不一致性?
【问题 2】(6 分)
引入独占锁指令 Clock()和解锁指令 Unlock(),对【问题 1】中的调度进行重写,要求满足两段锁协议,且事务 T1、T2 首条指令的相对请求时间与【问题 1】中的相同。【问题 3】(6 分)
下面是用 SQL 实现的结算程序,请补全空缺处的代码。
要求在保证销售信息不丢失的前提下,达到最大的系统并发度。
CREATE PROCEDURE buy(IN: CommNo VARCHAR(20), IN: AmountBuy INT)
BEGIN
//输入合法性验证
if(: AmountBuy<1) return-1;
SET TRANSACTION ISOL
LEVEL (a) ;
BEGIN TRANSACTION;
//插入销售记录 INSERT INTO Sale
VALUES(getGUID(),: CommNo, AmountBuy, getDATETIME()); //函数 getGUID():获取唯一值
//函数 getDATETIME():获取当前系统日期时间
if error ∥error 是由 DBMS 提供的上一句 SQL 的执行状态
BEGN
ROLLBACK; return-2;
END
//修改库存数量 UPDATE Commodity
SET
ATION
qty=
WHERE Ccode=: CommNo;
if error
BEGIN
(b)
ROLLBACK;
END
(c)
END
return-3;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库2018 年上半年数据库系统工程师考试上午真题+下午真题(5)在线全文阅读。
相关推荐: