试题四(15分)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某网上销售系统的部分关系模式如下:
订单表:orders(o_no,o_date,o_time,p_no,m_no,p_price,nums,amt,status)。其中属性含义分别为:订单号、订单日期、订单时间、产品编码、供应商编码、产品价格、产品数量、 订单金额、订单状态(0-未处理、1-已处理、2-已取消)。
产品表:products (p_no, p_name, p__type, price, m_no, p_nums)。其中属性含义分另存为: 产品编码、产品名称、产品类型、产品价格、供应商编码、库存数量。
【问题1】(5分)
节假日时,由供应商提供商品打折后的新价格,数据存放在临时表中,该临时表的表名为tmp_prices (不同供应商有不同的临时表),其关系模式如下:
tmp_prices(p_no, t_price,m_no);
后台维护人员需要根据供应商填写在tmp_prices中的数据来更新产品表中某些产品的价格。下面是基于游标,用SQL实现的价格更新程序,请补全空缺处的代码。
CREATE PROCEDURE UpdatePrice()
DECLARE
Pno VARCHAR(10);
Pprice real (6,2);
Mno VARCHAR(10);
(a) upPrice IS
SELECT p_no, t_price, m_no FROM tmp_prices;
BEGIN
(b) upPrice;
LOOP
FETCH upPrice INTO (c);
IF NOTFOUND DO BREAK //FETCH 操作无数据
UPDATE products SET price = Pprice WHERE p_no=Pno and m_no=Mno;
if error //error是由DBMS提供的上一句SQL的执行状态
BEGIN
ROLLBACK;
RETURN -1;
END
END LOOP
CLOSE upPrice;
(d);
END;
【问题2】(6分)
假设用户1和用户2同时购买1份A商品,用户3查询和浏览A商品。三个用户对应事务的部分调度序列如表4-1所示(事务中朱进行并发控制),其中T0时刻该A商品的库存数量 p_nums为 100。
请说明T4、T7时刻,用户3事务读取到的p_nums数值分别是多少。请说明T8时刻事务调度结果是否正确?若不正确请说明属于哪一种数据不一致性。
【问题3】(4分)
为保证并发事务的正确性,系统要求所有事务需遵循两段锁协议。
(1)请用100字以内的文字简要解释两段锁协议,并说明“两段”的含义。
(2)请说明两段锁协议是否可以避免死锁?如不能避免,应采取什么措施解决死锁问题。