触发器实验(学生)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.after触发器
(1)在Lineitem 表上定义一个UPDATE触发器,当修改订单明细时,自动修改订单Orders 的Totalprice,以保持数据一致性。
Totalprice=totalprice + extendedprice*(1-discount) * (1+tax))
delimiter $
drop trigger if exists TRI_Lineitem_Price_UPDA TE $
create trigger TRI_Lineitem_Price_UPDA TE AFTER UPDATE ON Lineitem for each row BEGIN
declare L_valuediff REAL;
Set
L_valuediff=new.extendedprice*(1-new.discount)*(1+new.tax)-old.extendedprice*(1-old.discout) *(1+old.tax);
update orders set totalprice=totalprice+L_valuediff where orderkey=new.orderkey;
END $
delimiter ;
(2) 在Lineitem 表上定义一个INSERT触发器,当插入一项订单明细时,自动修改订单Orders 的Totalprice,以保持数据一致性。
(3)在Lineitem 表上定义一个DELETE触发器,当删除一项订单明细时,自动修改订单Orders的Totalprice,以保持数据一致性。
(4)验证触发器TRI_Lineitem_Price_UPDATE
查看4996号订单的含税折扣总价totalprice
激活触发器:修改订单4996号订单第一个明细项的税率(tax),该税率增加0.5%
再次查看订单的含税折扣总价是否有变化,如有变化,则是触发器起作用。
2.BEFORE触发器
(1)在Lineitem 表上定义一个UPDA TE触发器,当修改订单明细中时,先检查供应表PartSupp中的可用数量availqty是否足够。
delimiter $
drop trigger if exists TRI_Lineitem_Quantity_UPDATE $
create trigger TRI_Lineitem_Quantity_UPDATE BEFORE UPDATE ON Lineitem for each row BEGIN
declare L_valuediff INT;
declare L_availqty INT;
Set L_valuediff=new.quantity-old.quantity;
select availqty into L_availqty
from partsupp
where partkey=new.partkey and suppkey=new.suppkey;
if(L_availqty-L_valuediff>=0) then
begin
update partsupp set availqty=availqty-L_valuediff
where partkey=new.partkey and suppkey=new.suppkey;
end;
end if;
end $
delimiter ;
(2)在Lineitem 表上定义一个INSERT触发器,当新增一项订单明细中时,先检查供应表PartSupp中的可用数量availqty是否足够。
(3)在Lineitem 表上定义一个DELETE触发器,当删除一项订单明细中时,该订单项订购的数量要归还对应的零件供应记录。
(4)验证触发器TRI_Lineitem_Quantity_UPDA TE
查看4996订单第1个明细项的零件和供应商编号、订购数量和可用数量
激活触发器:修改订单第1个明细项的可用数量
再次查看4996订单第1个明细项的零件和供应商编号、订购数量和可用数量,以验证触发器是否起作用
(3)删除触发器TRI_Lineitem_Price_UPDATE
Drop trigger TRI_Lineitem_Price_UPDATE;