MySQL 插入前触发器

17 Mar 2025 | 4 分钟阅读

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

语法

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

可以按如下方式解释 BEFORE INSERT 触发器语法参数

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

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

限制

  • 在 BEFORE INSERT 触发器中,我们只能访问和修改 NEW 值。
  • 我们不能访问 OLD 值。如果我们尝试访问 OLD 值,我们将收到错误,因为 OLD 值不存在。
  • 我们不能在 视图 上创建 BEFORE INSERT 触发器。

BEFORE INSERT 触发器示例

让我们通过示例了解如何在 CREATE TRIGGER 语句MySQL 中创建 BEFORE INSERT 触发器。

假设我们已按如下方式创建了一个名为 employee 的表

接下来,我们将向 employee 表插入一些记录,然后执行 SELECT 语句以查看表数据,如下所示

MySQL BEFORE INSERT TRIGGER

接下来,我们将使用 CREATE TRIGGER 语句来创建 BEFORE INSERT 触发器。此触发器会自动调用,如果有人尝试插入 occupation = 'Scientist',则插入 occupation = 'Leader'

如果触发器创建成功,我们将得到如下输出:

MySQL BEFORE INSERT TRIGGER

如何调用 BEFORE INSERT 触发器?

我们可以使用以下语句来调用上面创建的触发器

执行上述语句后,我们将得到如下输出

MySQL BEFORE INSERT TRIGGER

执行 SELECT 语句以验证输出

MySQL BEFORE INSERT TRIGGER

在此输出中,我们可以看到,当插入 occupation 列值为 'Scientist' 时,表将通过调用触发器自动填充 'Doctor' 值。

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

要使用此工具创建插入前触发器,我们首先需要启动 MySQL Workbench 并使用我们之前创建的用户名和密码登录。我们将看到如下屏幕

MySQL BEFORE INSERT TRIGGER

现在,请按照以下步骤创建 BEFORE INSERT 触发器

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

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

MySQL BEFORE INSERT TRIGGER

3. 展开表子菜单并选择要为其创建触发器的表。选择表后,右键单击选定的表(例如,employee),然后单击更改表选项。请参见下图

MySQL BEFORE INSERT TRIGGER

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

MySQL BEFORE INSERT TRIGGER

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

MySQL BEFORE INSERT TRIGGER

6. 现在,完成触发器代码,再次查看它们,如果没有发现错误,请单击应用按钮

MySQL BEFORE INSERT TRIGGER

7. 单击应用按钮后,单击完成按钮以完成。

MySQL BEFORE INSERT TRIGGER

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

MySQL BEFORE INSERT TRIGGER