MySql教程
MySql用户管理
MySQL数据库
MySql表格和视图
MySQL查询
MySQL索引
MySQL子句
MySQL授权
MySql控制流
MySQL条件
MySQL连接
MySQL键
MySQL触发器
MySQL聚合函数
MySQL常用
MySQL正则表达式
MySql差异性

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查询以查看表数据。
MySQL AFTER DELETE Trigger
第三,我们将创建另一个名为 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语句以验证表:
MySQL AFTER DELETE Trigger
然后,我们将创建一个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 ;

MySQL AFTER DELETE触发器
在此触发器中,我们首先指定了触发器名称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 AFTER DELETE Trigger
在输出中,我们可以看到删除的薪水减少了
第三,我们将从工资表中删除所有数据:
mysql> DELETE FROM salaries;
同样,我们将从total_salary_budget表中查询数据。我们可以看到,执行查询后,触发器将表更新为零。参见以下输出:
MySQL AFTER DELETE Trigger

如何要在MySQL工作台中创建AFTER DELETE触发器?

要使用此工具创建插入后触发器,我们首先需要 启动 MySQL Workbench ,然后使用我们之前创建的用户名和密码登录。我们将得到如下屏幕:
MySQL AFTER DELETE Trigger
现在执行以下操作创建AFTER DELETE触发器的步骤:
1、转到"导航"选项卡,然后单击 Schema菜单,该菜单包含 MySQL 服务器。
2、选择数据库(例如 employeedb ),双击该数据库以显示 子菜单,其中包含表,视图,函数和存储过程。参见下面的屏幕。
MySQL AFTER DELETE Trigger
3、展开 表格子菜单,然后选择要在其上创建触发器的表格。选择表格后,右键单击所选表格(例如, ,薪金),然后单击 更改表格 选项。参见下图:
MySQL AFTER DELETE Trigger
4、单击 Alter Table 选项,将显示以下屏幕:
MySQL之后DELETE Trigger
5、现在,单击上一节的红色矩形框中显示的 Trigger 标签,然后选择时间/事件 删除后。我们将注意到,有一个(+)图标按钮可添加触发器。单击该按钮,我们将基于选择Timing/Event的信息在触发器上获得默认代码:
MySQL AFTER DELETE触发器
6、现在,完成触发代码,再次检查它们,如果没有发现错误,请单击 应用按钮。
MySQL AFTER DELETE Trigger
7、单击"应用"按钮后,单击 完成按钮以完成操作。
 MySQL AFTER DELETE Trigger
8、如果查看模式菜单,则可以在 salaries 表下看到 salaries_AFTER_DELETE 触发器,如下所示:
MySQL AFTER DELETE Trigger
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4