IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 实验四:触发器实验 -> 正文阅读

[大数据]实验四:触发器实验

实验四:触发器实验


实验目的:
掌握数据库触发器的设计与使用方法
理解不同类型触发器的作用和执行原理

实验内容:
一、After触发器
二、Before触发器
三、删除触发器

实验过程与要求:
1.After触发器
(1)在LineItem上定义Update触发器,当修改订单明细(修改订单明细价格extendedPrice、折扣discount、税率tax)自动修改表Orders中的订单总金额TotalPrice,以保持数据一致性。
(2)在LineItem上定义触发器,删除一项订单明细时,自动修改表Orders中的订单总金额TotalPrice,以保持数据一致性。
(3)在LineItem上定义Delete触发器,当删除一项订单明细时,自动修改表Orders中的订单总金额TotalPrice,以保持数据一致性。
(4)验证触发器作用
2.Before触发器
(1)在LineItem表上定义一个Before Update触发器,当修改订单明细中的数量quantity时,先检查供应表PartSupp中的可用数量availqty是否足够
(2)在LineItem表上定义一个Before Insert触发器,当插入一条订单明细时,先检查供应表PartSupp中的可用数量availqty是否足够
(3)在LineItem表上定义一个Before Delete触发器,当删除一条订单明细时,该明细对应的零件数量应当归还相应的零件供应记录
(4)验证触发器作用

实验重点:触发器的定义、
实验难点:利用触发器实现较为复杂的用户自定义完整性

实验过程
1.After触发器
(1)定义Update 触发器
(2)定义Insert 触发器
(3)定义Delete 触发器
(4)验证触发器作用
2.Before触发器
(1)定义Before Update 触发器
(2)定义Before Insert触发器
(3)定义Before Delete触发器
(4)验证触发器作用
3.删除触发器

参考:

#1after触发器#
#(1)total price=totalprice+extendedprice*(1-discount)*(1+tax)#
------------
CREATE TRIGGER `TRI_Lineitem_Price_update` AFTER UPDATE ON `lineitem` FOR EACH ROW update orders 
begin
set  totalprice=totalprice+(new.extendedprice*(1-new.discount)*(1+new.tax)
-old.extendedprice*(1-old.discount)*(1+old.tax))
where orderkey=new.orderkey; 
end;
--------------
//(2)
 create trigger `TRI_Lineitem_Price_insert` after insert on `lineitem` for each row update orders 
begin
set totalprice=totalprice+NEW.extendedprice*(1-NEW.discount)*(1+NEW.tax)
where orderkey=new.orderkey;
end;
//(3)
create trigger `TRI_Lineitem_Price_delete`
after delete on `lineitem`
for each row
begin
update orders set totalprice
=totalprice-OLD.extendedprice*(1-OLD.discount)*(1+OLD.tax)
where orderskey=orderskey;
end;

#验证触发器TRI_Lineitem_Price_update#
#查看1854号订单的含税折扣总价totalprice#
select totalprice from orders where orderskey =1854;
#激活触发器,修改1854号订单第一个明细项的税率,该税率增加0.5%#
update Lineitem set tax =tax+0.05where orderskey=1854 and linenumber=1;
#再次查看2号订单的含税折扣总价totalprice是否有变化#
select totalprice from orders where orderskey =1854;
2.before触发器
//(1)
create trigger TRI_Lineitem_Quantity_update
before update on Lineitem
for each row
begin
select availqty into @L_availqty from partsupp
where partkey=new.partkey and suppkey=new.suppkey;
if(@L_availqty-(new.partkey-old.quantity)>=0) then
begin
update partsupp set availqty=availqty-(new.quantity)
where partkey=new.partkey and suppkey=new.suppkey ;
end;
end if;
end;
// (2)
create trigger TRI_Lineitem_Quantity_insert
before insert on Lineitem
for each rowbegin
select availqty into @L_availqty from partsupp
where partkey=new.partkey and suppkey=new.suppkey;
if(@L_availqty-(new.partkey)>=0) then
begin
update partsupp set availqty=availqty-(new.quantity)
where partkey=new.partkey and suppkey=new.suppkey ;
end;
end if;
end;
//(3)
create trigger TRI_Lineitem_Quantity_delete
before
delete on Lineitem
for each row
begin
update partsupp set availqty=availqty-(old.quantity)
where partkey=old.partkey and suppkey=old.suppkey;
end;


//验证触发器TRL-Lineitem_Quantity _update#
#查看1854号订单第1个明细项的零件和供应商编号,订购数量,可用数量#
select L.partkey,L.suppkey,L.quantity,PS.availqty
from Lineitem L,PartSupp PS
where L.partkey=PS.partkey 
and L.suppkey=PS.suppkeyand L.orderskey=1854 
and L.Linenumber=1;
#激活触发器:修改1854号订单第1个明细项的订购数量#
update Lineitem set quantity=quantity+5
where orderskey=1854 and linenumber=1;
#再次查看1854订单第1个明细项的相关信息,以验证触发器是否起作用#
select L.partkey,L.suppkey,L.quantity,PS.availqty
from Lineitem L,PartSupp PS
where L.partkey=PS.partkey 
and L.suppkey=PS.suppkeyand L.orderskey=1854 
and L.Linenumber=1;
#删除触发器#
drop trigger TRI_Lineitem_Price_update; 

//验证触发器TRI_Lineitem_Price_update:触发器起作用了
select totalprice from orders where orderskey
//验证触发器TRL_lineitem_quantity_update;触发器起作用了

 insert into lineitem(partkey,suppkey,quantity) values(1,1,20);

select availqty from partsupp;

 delete from lineitem where linenumber=1;






  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:43:14  更:2022-04-22 18:45:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:50:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码