MySQL AFTER DELETE触发器

MySQL AFTER DELETE触发器

在MySQL中,每当表上触发删除事件时,AFTER DELETE触发器会自动调用。在本文中,我们将学习如何使用其语法和示例创建AFTER DELETE触发器。

语法

以下是在MySQL中创建AFTER DELETE触发器的语法:

CREATE TRIGGER trigger_name 
AFTER DELETE
ON table_name FOR EACH ROW
Trigger_body ;
  • 首先,我们将指定要创建的 触发器的名称 。它在模式中应该是唯一的。
  • 其次,我们将指定 触发动作的时间 ,即AFTER DELETE。此触发器将在每个表上进行的每一行更改之后被调用。
  • 第三,我们将指定触发器所关联的 表的名称 。它必须在ON关键字之后写。如果我们没有指定表名,就不会有触发器存在。
  • 最后,我们将指定包含在触发器激活时执行的语句的 触发器主体

如果我们想要执行多个语句,我们将使用包含一组SQL查询的 BEGIN END 块来定义触发器的逻辑。请参见下面的语法:

DELIMITER CREATE TRIGGER trigger_name AFTER DELETE
ON table_name FOR EACH ROW
BEGIN
   variable declarations
   trigger code
END
DELIMITER ;

限制条件

  • 我们可以在“AFTER DELETE”触发器中访问旧的行,但不能更新它们。
  • 我们无法访问新的行。这是因为不存在新的行。
  • 我们无法在视图上创建“AFTER DELETE”触发器。

“AFTER DELETE”触发器示例

让我们通过一个示例来理解如何使用MySQL的“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触发器

为了完成上述操作,我们将首先创建另一个名为 total_salary_budget 的表格,用来存储salaries表中的薪资信息。

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触发器

然后,我们将创建一个AFTER DELETE触发器,在从salaries表中删除一行后,将总工资更新到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触发器

在输出中,我们可以看到删除的薪水减少了总预算。

第三,我们将从薪水表中删除所有数据:

mysql> DELETE FROM salaries;

再次,我们将从total_salary_budget表中查询数据。我们可以看到在查询执行后,触发器将表更新为零。请参见下方输出:

MySQL AFTER DELETE触发器

如何在MySQL Workbench中创建“删除后触发器”?

使用此工具创建“插入后触发器”,我们首先需要启动MySQL Workbench并使用之前创建的用户名和密码登录。我们将获得以下屏幕:

MySQL AFTER DELETE触发器

现在根据以下步骤创建一个AFTER DELETE触发器:

1. 转到导航选项卡,点击包含所有可用数据库的 模式菜单 内的 MySQL 服务器。

2. 选择数据库(例如, employeedb ),双击显示包含表、视图、函数和存储过程的 子菜单 。参见下面的屏幕截图。

MySQL AFTER DELETE触发器

3. 展开 Tables 子菜单并选择要创建触发器的表。选择表后,右键单击选定的表(例如 salaries ),然后点击 Alter Table 选项。请参见下面的图像:

MySQL AFTER DELETE触发器

4. 单击 Alter Table 选项将显示如下屏幕:

MySQL AFTER DELETE触发器

现在,点击前一节中显示的红色矩形框内的 ** 触发器 标签页 ** ,然后选择Timing/Event 删除之后 . 我们会注意到有一个(+)图标按钮可以添加触发器。点击该按钮,我们将根据选择的Timing/Event得到一个默认的触发器代码:

MySQL AFTER DELETE触发器

6. 现在,完成触发器代码,再次审查它们,如果没有错误,点击 行动 按钮。

MySQL AFTER DELETE触发器

7. 单击 “Apply” 按钮后,请单击 “Finish” 按钮 完成操作。

MySQL AFTER DELETE触发器

8. 如果我们查看模式菜单,我们会看到在 salaries 表下的 salaries_AFTER_DELETE 触发器如下所示:

MySQL AFTER DELETE触发器

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程