触发器实验(学生)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档