MySQL AFTER DELETE触发器
每当在表上触发删除事件时,MySQL中的AFTER DELETE触发器都会自动调用。在本文中,我们将学习如何使用其语法和示例创建AFTER DELETE触发器。
语法
以下是用于创建AFTER DELETE触发器的语法在MySQL中
AFTER DELETE 触发器:
CREATE TRIGGER trigger_name
AFTER DELETE
ON table_name for EACH ROW
Trigger_body ;
AFTER DELETE触发语法参数可以解释如下:
首先,我们将指定要创建的触发器的名称。它在架构中应该是唯一的。
第二,我们将指定触发动作时间,该时间应为"删除后"。在表的每一行更改发生后,将触发此触发器。
第三,我们将指定与触发器关联的表的名称。它必须写在ON关键字之后。如果不指定表名,则触发器将不存在。
最后,我们将指定触发主体,其中包含在触发触发器时执行的语句。
如果要执行多个语句,我们将使用
BEGIN END 块,该块包含一组SQL查询来定义触发器的逻辑。请参见以下语法:
DELIMITER $
CREATE TRIGGER trigger_name AFTER DELETE
ON table_name for EACH ROW
BEGIN
variable declarations
trigger code
END$
DELIMITER ;
限制
我们可以访问OLD行,但是无法在AFTER DELETE触发器中更新它们。
我们无法访问NEW行。这是因为不存在NEW行。
我们无法在VIEW上创建AFTER DELETE触发器。
AFTER DELETE触发器示例
让我们了解如何使用 CREATE TRIGGER语句创建AFTER DELETE触发器
假设我们已经创建了一个名为
salaries 的表来存储员工的薪水信息,如下所示:
CREATE TABLE salaries (
emp_num int PRIMARY KEY,
valid_from DATE NOT null,
amount DEC(8 , 2 ) NOT null default 0
);
接下来,我们将使用以下语句在此表中插入一些记录:
INSERT INTO salaries (emp_num, valid_from, amount)
VALUES
(102, '2020-01-10', 45000),
(103, '2020-01-10', 65000),
(105, '2020-01-10', 55000),
(107, '2020-01-10', 70000),
(109, '2020-01-10', 40000);
执行SELECT查询以查看表数据。
第三,我们将创建另一个名为
total_salary_budget 的表,该表将保留薪水表中的薪水信息。
CREATE TABLE total_salary_budget(
total_budget DECIMAL(10,2) NOT null
);
第四,我们将使用
SUM()函数,该函数从薪金表返回总薪水,并将此信息保留在total_salary_budget表中:
mysql> INSERT INTO total_salary_budget (total_budget)
SELECT SUM(amount) FROM salaries;
执行SELECT语句以验证表:
然后,我们将创建一个AFTER DELETE触发器,在从工资表中删除一行后,将总工资更新到total_salary_budget表中。
DELIMITER $
CREATE TRIGGER after_delete_salaries
AFTER DELETE
ON salaries for EACH ROW
BEGIN
UPDATE total_salary_budget SET total_budget = total_budget-old.amount;
END$
DELIMITER ;
在此触发器中,我们首先指定了触发器名称after_delete_salaries 。然后,指定触发事件。第三,我们指定了与触发器关联的表名。最后,我们在触发器主体内编写了触发器逻辑,该逻辑在从工资表中删除一行后将总薪水更新到total_salary_budget表中。
如何调用AFTER DELETE触发器?
首先,我们将使用以下语句从工资表中删除工资,以调用上面创建的触发器:
mysql> DELETE FROM salaries WHERE emp_num = 105;
接下来,我们将从total_salary_budget表中查询数据。我们可以看到该表在执行查询后已被修改。看到下面的输出:
mysql> SELECT * FROM total_salary_budget;
在输出中,我们可以看到删除的薪水减少了
第三,我们将从工资表中删除所有数据:
mysql> DELETE FROM salaries;
同样,我们将从total_salary_budget表中查询数据。我们可以看到,执行查询后,触发器将表更新为零。参见以下输出:
如何要在MySQL工作台中创建AFTER DELETE触发器?
要使用此工具创建插入后触发器,我们首先需要
启动 MySQL Workbench ,然后使用我们之前创建的用户名和密码登录。我们将得到如下屏幕:
现在执行以下操作创建AFTER DELETE触发器的步骤:
1、转到"导航"选项卡,然后单击
Schema菜单,该菜单包含 MySQL 服务器。
2、选择数据库(例如
employeedb ),双击该数据库以显示
子菜单,其中包含表,视图,函数和存储过程。参见下面的屏幕。
3、展开
表格子菜单,然后选择要在其上创建触发器的表格。选择表格后,右键单击所选表格(例如,
,薪金),然后单击
更改表格 选项。参见下图:
4、单击
Alter Table 选项,将显示以下屏幕:
5、现在,单击上一节的红色矩形框中显示的
Trigger 标签,然后选择时间/事件
删除后。我们将注意到,有一个(+)图标按钮可添加触发器。单击该按钮,我们将基于选择Timing/Event的信息在触发器上获得默认代码:
6、现在,完成触发代码,再次检查它们,如果没有发现错误,请单击
应用按钮。
7、单击"应用"按钮后,单击
完成按钮以完成操作。
8、如果查看模式菜单,则可以在
salaries 表下看到
salaries_AFTER_DELETE 触发器,如下所示: