1.实验目的

掌握数据库触发器的设计和使用方法

2.实验内容和要求

定义 BEFORE 触发器和 AFTER 触发器。能够理解不同类型触发器的作用和执行原理,验证触发器的有效性。

3.实验步骤

(1)AFTER 触发器

①在 Lineitem 表上定义一个 UPDATE 触发器,当修改订单明细(即修改订单明细价格

extendedprice、折扣 discount、税率 tax)时,自动修改订单 Orders 的 TotalPrice,以保持数据一致性。

SQL语句:

数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis

查看触发器:

数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis_02

触发前查询:

数据库触发器如何更新redis 数据库触发器编写实例_SQL_03

数据库触发器如何更新redis 数据库触发器编写实例_sql_04

修改订单明细:

数据库触发器如何更新redis 数据库触发器编写实例_触发器_05


数据库触发器如何更新redis 数据库触发器编写实例_触发器_06

触发后查询:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_07

②在 Lineitem 表上定义一个 INSERT 触发器,当增加一项订单明细时,自动修改订单

Orders 的 TotalPrice,以保持数据的一致性。

SQL语句:

数据库触发器如何更新redis 数据库触发器编写实例_触发器_08

查看触发器:

数据库触发器如何更新redis 数据库触发器编写实例_sql_09

插入订单明细:

数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis_10

插入前:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_11

插入后:

查询:

数据库触发器如何更新redis 数据库触发器编写实例_sql_12


数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis_13


数据库触发器如何更新redis 数据库触发器编写实例_SQL_14

③在 Lineitem 表上定义一个 DELETE 触发器,当删除一项订单明细时,自动修改订单Orders 的 TotalPrice,以保持数据一致性。

SQL语句:

数据库触发器如何更新redis 数据库触发器编写实例_触发器_15

查看触发器:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_16

删除明细:

数据库触发器如何更新redis 数据库触发器编写实例_sql_17

删除前查询:

数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis_18

删除后查询:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_19

(2)BEFORE 触发器

①在 Lineitem 表上定义一个 BEFORE UPDATE 触发器,当修改订单明细中的数量(quantity)时,先检查供应表 PartSupp 中的可用数量 availqty 是否足够。

SQL语句:

数据库触发器如何更新redis 数据库触发器编写实例_sql_20

验证:

在没触发之前查询:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_21


数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis_22

修改quantity:

数据库触发器如何更新redis 数据库触发器编写实例_触发器_23

再查询:

数据库触发器如何更新redis 数据库触发器编写实例_sql_24

②在 Lineitem 表上定义一个 BEFORE INSERT 触发器,当插入订单明细时,先检查供应表 PartSupp 中的可用数量 availqty 是否足够。

SQL语句:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_25

查询:

数据库触发器如何更新redis 数据库触发器编写实例_数据库_26

数据库触发器如何更新redis 数据库触发器编写实例_数据库_27

插入数据:

数据库触发器如何更新redis 数据库触发器编写实例_SQL_28

再查询:

数据库触发器如何更新redis 数据库触发器编写实例_触发器_29

③在 Lineitem 表上定义一个 BEFORE DELETE 触发器,当删除订单明细时,该订单明细项订购的数量要归还于对应的零件供应记录。

SQL语句:

数据库触发器如何更新redis 数据库触发器编写实例_触发器_30

查询:

数据库触发器如何更新redis 数据库触发器编写实例_数据库触发器如何更新redis_31

删除:

数据库触发器如何更新redis 数据库触发器编写实例_sql_32

再查询:

数据库触发器如何更新redis 数据库触发器编写实例_SQL_33