MySQL BEFORE DELETE Trigger

17 Mar 2025 | 4 分钟阅读

MySQL 中的 BEFORE DELETE 触发器会在每次对表执行 DELETE 操作时自动调用。在本文中,我们将学习如何创建 BEFORE DELETE 触发器,包括其语法和示例。

语法

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

BEFORE DELETE 触发器语法参数可解释如下

  • 首先,我们将指定要创建的触发器的名称。它在模式(schema)内应该是唯一的。
  • 其次,我们将指定触发器操作时间,它应该是 BEFORE DELETE。此触发器将在对表执行的每行更改之前调用。
  • 第三,我们将指定触发器关联的表的名称。它必须写在 ON 关键字之后。如果未指定表名,则不会存在触发器。
  • 最后,我们将指定触发器激活时要执行的语句。

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

限制

  • 在 BEFORE DELETE 触发器中,我们可以访问 OLD 行,但不能更新它们。
  • 我们无法访问 NEW 行。这是因为不存在新行。
  • 我们不能在 VIEW 上创建 BEFORE DELETE 触发器。

BEFORE DELETE 触发器示例

让我们通过一个示例了解如何使用 MySQL 的 CREATE TRIGGER 语句来创建 BEFORE DELETE 触发器。

假设我们已经创建了一个名为 salaries 的表来存储员工的薪资信息,如下所示

接下来,我们将使用以下语句将一些记录插入到此表中

执行 SELECT 查询以查看表数据。

MySQL BEFORE DELETE Trigger

第三,我们将创建另一个名为 salary_archives 的表,该表保留已删除薪资的信息。

然后,我们将创建一个 BEFORE DELETE 触发器,在从 salaries 表中删除一行之前,将新记录插入到 salary_archives 表中。


MySQL BEFORE DELETE Trigger

在此触发器中,我们首先指定了触发器名称 before_delete_salaries。然后,指定了触发事件。第三,我们指定了触发器关联的表名。最后,我们在触发器主体中编写了触发器逻辑,将已删除的行插入到 salary_archives 表中。

如何调用 BEFORE DELETE 触发器?

让我们测试上面创建的 BEFORE DELETE 触发器以及如何调用它们。所以,首先,我们将从 salaries 表中删除一行

第二,我们将查询 salary_archives 表中的数据,以使用 select 语句验证上面创建的触发器是否已调用

执行语句后,我们可以看到触发器已成功调用,并将新记录插入到 salary_archives 表中。

MySQL BEFORE DELETE Trigger

第三,我们将删除 salaries 表中的所有行

最后,我们将再次查询 salary_archives 表中的数据。由于 DELETE 语句从 salaries 表中删除了四条记录,因此触发器被调用了四次。请参阅下面的输出

MySQL BEFORE DELETE Trigger

如何在 MySQL Workbench 中创建 BEFORE DELETE 触发器?

要使用 MySQL Workbench 创建 BEFORE DELETE 触发器,我们首先需要启动它,然后使用我们之前创建的用户名和密码登录。我们将看到如下屏幕

MySQL BEFORE DELETE Trigger

现在执行以下步骤来创建 BEFORE DELETE 触发器

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

2. 选择数据库(例如,employeedb),然后双击它。它将显示包含 Tables、Views、Functions 和 Stored Procedures 的 **子菜单**。请参阅下面的屏幕。

MySQL BEFORE DELETE Trigger

3. 展开 **Tables 子菜单** 并选择要在其上创建 触发器 的表。选择表后,右键单击所选表(例如,salaries),然后单击 **Alter Table** 选项。请参阅下图

MySQL BEFORE DELETE Trigger

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

MySQL BEFORE DELETE Trigger

5. 现在,单击前面部分红色矩形框中显示的 **Trigger 选项卡**,然后选择 Timing/Event BEFORE DELETE。我们会注意到有一个 (+) 图标按钮用于添加触发器。单击该按钮,我们将根据选择的 Timing/Event 获得默认的触发器代码

MySQL BEFORE DELETE Trigger

6. 现在,完成触发器代码,再次进行审核,如果没有发现错误,请单击应用按钮。

MySQL BEFORE DELETE Trigger

7. 单击 Apply 按钮后,单击 **Finish** 按钮完成。

MySQL BEFORE DELETE Trigger

8. 如果查看 schema 菜单,我们将在 salaries 表下看到触发器 **salaries_before_trigger**,如下所示

MySQL BEFORE DELETE Trigger