MySQL Create Trigger

2025年3月17日 | 阅读 3 分钟

在本文中,我们将学习如何在 MySQL 中创建第一个触发器。我们可以使用 CREATE TRIGGER 语句来创建新的触发器。在使用 CREATE TRIGGER 命令时,需要确保我们具有触发器权限。以下是创建触发器的基本语法

参数解释

create trigger 语法包含以下参数

trigger_name: 这是我们要创建的触发器的名称。它必须写在 CREATE TRIGGER 语句之后。需要确保触发器名称在模式中是唯一的。

trigger_time: 这是触发器操作的时间,可以是 BEFORE 或 AFTER。在定义触发器时,这是必需的参数。它表示在对表进行每次行修改之前或之后调用触发器。

trigger_event: 这是激活触发器的操作类型名称。它可以是 INSERT、UPDATEDELETE 操作。触发器一次只能调用一个事件。如果我们想定义一个由多个事件调用的触发器,则需要定义多个触发器,每个事件一个。

table_name: 这是触发器关联的表名。它必须写在 ON 关键字之后。如果我们没有指定表名,则不会存在触发器。

BEGIN END Block: 最后,我们将指定触发器激活时要执行的语句。如果我们想执行多个语句,将使用 BEGIN END 块,其中包含一组查询来定义触发器的逻辑。

触发器体可以访问受 DML 语句影响的列的值。NEWOLD 修饰符用于区分 DML 语句执行之前之后的列值。我们可以使用列名与 NEW 和 OLD 修饰符一起作为 OLD.col_nameNEW.col_name。OLD.column_name 表示在更新或删除发生之前的现有行的列。NEW.col_name 表示将要插入的新行的列,或者更新后现有行的列。

例如,假设我们想使用触发器更新列名 message_info。在触发器体中,我们可以访问更新前的列值为 OLD.message_info,新值为 NEW.message_info

我们可以通过下表来理解 OLD 和 NEW 修饰符的可用性

触发器事件OLDNEW
INSERT不能是的
UPDATE是的是的
DELETE是的不能

MySQL 触发器示例

让我们开始在 MySQL 中创建一个触发器,该触发器将修改 employee 表。首先,我们将通过执行以下语句创建一个名为 employee 的新表

接下来,执行以下语句将记录填充到 employee 表中

接下来,执行SELECT 语句来验证插入的记录

MySQL Create Trigger

接下来,我们将创建一个 BEFORE INSERT 触发器。如果有人尝试插入 working_hours < 0,此触发器将自动插入 working_hours = 0

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

MySQL Create Trigger

现在,我们可以使用以下语句来调用此触发器

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

MySQL Create Trigger

在此输出中,我们可以看到,当向表中 working_hours 列插入负值时,触发器会自动填充零值。