实验6.4 触发器

更新于 2026年10月10日 版权声明
实验6.4 触发器

【实验目的】

①掌握使用图形界面工具创建触发器。

②掌握使用SQL创建触发器。

③掌握使用图形界面工具修改触发器。

④掌握使用SQL修改触发器。

⑤掌握使用图形界面工具删除触发器。

⑥掌握使用SQL删除触发器。

【实验内容】

①使用SQL语句复制表customers生成一个新表cuscopy,新表与老表结构相同,数据相同,然后使用图形界面工具建立触发器customers_AFTER_INSERT与customers_AFTER_UPDATE,当试图在customers表中插入或更改数据时,将执行触发器,实现cuscopy表和customers表数据的同步更新。

②建立一个触发器orders_AFTER_INSERT,当向orders表中插入一个新订单时被触发,自动更新products表的quantity列,即把在orders表中插入行时指定的qty值从products相应行的quantity中减去。

③使用图形界面工具修改触发器customers__AFTER_INSERT。

④使用图形界面工具删除触发器customers_AFTER_INSERT。

⑤使用SQL删除触发器orders_AFTER_INSERT。

【实验步骤】

(1)使用图形界面工具建立触发器

先使用SQL语句复制表customers生成一个新表cuscopy,新表与老表的结构相同,数据也相同,然后使用图形界面工具建立触发器customers_AFTER_INSERT与customers_AFTER_UPDATE,当试图在customers表中插入或更改数据时,将执行触发器,实现cuscopy表和customers表数据的同步更新。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②输入下面的SQL语句:

CREATE TABLE cuscopy LIKE customers;
INSERT INTO cuscopy SELECT * FROM customers;

③单击工具栏中的 图示 图标或者按下快捷键“Ctrl+Shift+Enter”,执行上面的SQL语句。

④在“Navigator”导航栏的“Schemas”选项页中,依次展开节点“sales”→“Tables”,右击“customers”,在快捷菜单中选择“Alter Table...”选项,在查询窗口中显示表的结构。单击“Triggers”,进入创建触发器界面,如图6.18所示。

⑤分别单击左侧菜单的“AFTER INSERT”与“AFTER UPDATE”旁的加号,创建插入与更新操作的触发器“customers_AFTER_INSERT”与“customers_AFTER_UPDATE”,在右侧SQL模板的BEGIN与END之间添加触发器操作,使cuscopy的数据和customers的数据一致,如图6.19和图6.20所示。

图示

图6.18 创建触发器界面

图示

图6.19 “插入”操作的触发器

图示

图6.20 “更新”操作的触发器

⑥单击“Apply”按钮,执行创建触发器操作,成功之后,可以在导航栏中先刷新后查看是否存在新建的触发器,如图6.21所示。

图示

图6.21 创建的触发器

⑦验证触发器是否起作用。分别向customers表插入一行数据和更新数据,如图6.22所示。执行完成后,查询cuscopy表内容,如图6.23所示。cuscopy也增加了同样一行,并且进行了同样更新,说明这两个触发器已经成功触发。

图示

图6.22 插入、更新数据验证触发器

图示

图6.23 查看触发器执行结果

(2)使用SQL建立触发器

建立一个触发器orders_AFTER_INSERT,当向orders表中插入一个新订单时被触发,自动更新products表的quantity列,即把在orders表中插入行时指定的qty值从products相应行的quantity中减去。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

DROP TRIGGER IF EXISTS sales.orders_AFTER_INSERT;
DELIMITER $$
USE sales$$
CREATE DEFINER = CURRENT_USER TRIGGER sales.orders_AFTER_INSERT AFTER INSERT ON Orders FOR EACH ROW
BEGIN
UPDATE Products SET quantity=quantity-new.qty WHERE pid = new.pid;
END$$
DELIMITER ;

③单击工具栏中的 图示 图标,执行上面的SQL语句,成功之后,可以在导航栏中先刷新后查看新建的触发器,如图6.24所示。

图示

图6.24 导航栏中查看触发器

④验证触发器是否起作用。首先查询products表的内容,记下p01的quantity值,然后向orders表插入一行数据,SQL语句如下:

USE sales
INSERT orders (ordno,aid,cid,pid,qty)
values ('1100','a01','c001','p01',2000)

插入成功之后,再次查询products表的内容,比较两次查询结果中p01的quantity值。

(3)修改触发器

使用MySQL Workbench修改触发器cus_AFTER_INSERT。

①在“Navigator”导航栏的“Schemas”选项页中依次展开节点“sales”→“Tables”,右击“customers”,在快捷菜单中选择“Alter Table...”选项,进入“Triggers”界面,在查询窗口中显示触发器定义的SQL语句。

②对插入语句进行修改,实现对插入cuscopy表的元组的discnt值为插入customers表的discnt值的1.1倍,单击“Apply”按钮,执行窗口中的SQL语句。成功之后,customers_AFTER_INSERT触发器即完成修改,如图6.25所示。

图示

图6.25 查询窗口中的修改触发器的SQL语句

③验证。向customers 表插入一行数据,如图6.26所示。然后查询cuscopy表的内容,如图6.27所示,可以看到新插入的这行discnt值为插入customer表的discnt值的1.1倍。

图示

图6.26 向customers 表插入一行数据

图示

图6.27 查询cuscopy表的内容

(4)使用图形界面工具删除触发器

删除触发器customers_AFTER_INSERT。

在“Navigator”导航栏的“Schemas”选项页中依次展开节点“sales”→“Tables”,右击“customers”,在快捷菜单中选择“Alter Table...”选项,进入“Triggers”界面,将光标移至左侧对应的触发器处,单击“-”按钮后再单击“Apply”按钮应用删除操作,如图6.28所示。可以在导航栏中查看customers_AFTER_INSERT是否存在,如图6.29所示。

图示

图6.28 删除触发器

图示

图6.29 触发器orders_AFTER_INSERT被删除

(5)使用SQL删除触发器

删除触发器orders_AFTER_INSERT。

①在图标菜单中单击第一个图标 图示,新建一个查询窗口。

②在查询窗口输入下面的SQL语句:

DROP TRIGGER orders_AFTER_INSERT

③单击工具栏中的 图示 图标,执行上面的SQL语句,成功之后,可以在导航栏中先刷新后查看orders_AFTER_INSERT是否存在,如图6.30所示。

图示

图6.30 触发器orders_AFTER_INSERT被删除

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)