MySQL BEFORE UPDATE Trigger

17 Mar 2025 | 4 分钟阅读

MySQL 中的 BEFORE UPDATE 触发器会在与该触发器关联的表上执行更新操作时自动调用。在本文中,我们将学习如何创建 BEFORE UPDATE 触发器,包括其语法和示例。

语法

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

下面将解释 BEFORE UPDATE 触发器语法的参数

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

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

限制

  • 我们不能在 BEFORE UPDATE 触发器中更新 OLD 值。
  • 我们可以更改 NEW 值。
  • 我们不能在 VIEW 上创建 BEFORE UPDATE 触发器。

BEFORE UPDATE 触发器示例

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

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

接下来,我们将一些记录插入到 sales_info 表中,如下所示

然后,执行 SELECT 语句以查看表数据,如下所示

MySQL BEFORE UPDATE Trigger

接下来,我们将使用 CREATE TRIGGER 语句来创建 BEFORE UPDATE 触发器。此触发器将在表上发生更新事件之前自动调用。

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

MySQL BEFORE UPDATE Trigger

如果我们将 quantity 列的值更新为比当前值大两倍的新值,则触发器会产生错误消息并停止更新。

让我们详细了解已创建的触发器

首先,我们在 CREATE TRIGGER 子句中将触发器名称指定为 befor_update_salesInfo。其次,指定触发事件,然后指定触发器关联的表名。第三,我们声明了一个变量并设置了它的值。最后,我们指定了触发器体,该触发器检查新值是否是旧值的两倍,然后引发错误。

如何调用 BEFORE UPDATE 触发器?

首先,我们可以使用以下语句来更新 id = 2 的行的 quantity

此语句运行良好,因为它不违反规则。接下来,我们将执行以下语句,将 id = 2 的行的 quantity 更新为 600

它将产生如下错误,因为它违反了规则。请参见下面的输出。

MySQL BEFORE UPDATE Trigger

如何在 MySQL workbench 中创建 BEFORE UPDATE 触发器?

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

MySQL BEFORE UPDATE Trigger

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

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

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

MySQL BEFORE UPDATE Trigger

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

MySQL BEFORE UPDATE Trigger

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

MySQL BEFORE UPDATE Trigger

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

MySQL BEFORE UPDATE Trigger

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

MySQL BEFORE UPDATE Trigger

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

MySQL BEFORE UPDATE Trigger

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

MySQL BEFORE UPDATE Trigger