MySQL AFTER UPDATE触发器
当与触发器相关的表上触发UPDATE事件时,MySQL中的AFTER UPDATE触发器将自动调用。在本文中,我们将学习如何使用其语法和示例创建AFTER UPDATE触发器。
语法
创建MySQL中的AFTER UPDATE触发器的语法如下:
CREATE TRIGGER trigger_name
AFTER UPDATE
ON table_name FOR EACH ROW
trigger_body ;
我们可以按照以下方式解释AFTER UPDATE触发器的语法参数:
- 首先,我们需要指定要创建的 触发器名称 。它在模式内必须是唯一的。
- 其次,我们需要指定 触发器动作时间 ,应为AFTER UPDATE。该触发器将在每次对表进行更改时调用。
- 第三,我们需要指定 触发器关联的表名称 。在 ON 之后必须写出。如果我们没有指定表名称,则触发器将不存在。
- 最后,我们将指定包含在触发器激活时执行的语句的 触发器主体 。
如果我们想要执行多个语句,我们将使用包含一组SQL查询的 BEGIN END 块来定义触发器的逻辑。请查看以下语法:
DELIMITER CREATE TRIGGER trigger_name AFTER UPDATE
ON table_name FOR EACH ROW
BEGIN
variable declarations
trigger code
END
DELIMITER ;
限制
- 我们可以访问旧行,但不能更新它们。
- 我们可以访问新行,但不能更新它们。
- 我们不能在一个 视图 上创建AFTER UPDATE触发器。
AFTER UPDATE触发器示例
让我们通过一个示例来了解如何使用MySQL中的CREATE TRIGGER语句创建AFTER UPDATE触发器。
假设我们创建了一个名为 students 的表来存储学生的信息,如下所示:
mysql> CREATE TABLE students(
id int NOT NULL AUTO_INCREMENT,
name varchar(45) NOT NULL,
class int NOT NULL,
email_id varchar(65) NOT NULL,
PRIMARY KEY (id)
);
接下来,我们将使用下面的语句将一些记录插入到这个表中:
INSERT INTO students (name, class, email_id)
VALUES ('Stephen', 6, 'stephen@javatpoint.com'),
('Bob', 7, 'bob@javatpoint.com'),
('Steven', 8, 'steven@javatpoint.com'),
('Alexandar', 7, 'alexandar@javatpoint.com');
执行 SELECT 查询以查看表数据。
第三,我们将创建另一张名为 students_log 的表格,该表格将保留所选用户中的更新信息。
mysql> CREATE TABLE students_log(
user varchar(45) NOT NULL,
descreptions varchar(65) NOT NULL
);
我们将创建一个\”AFTER UPDATE\”触发器,将下一班级中的所有学生晋升一个级别,即6级将变成7级,7级将变成8级,依此类推。每当对\”students\”表中的一行进行更新操作时,都会在\”students_log\”表中插入一行新数据。该表保存了当前用户ID和当前更新的描述。请参阅下面的触发器代码。
DELIMITER CREATE TRIGGER after_update_studentsInfo
AFTER UPDATE
ON students FOR EACH ROW
BEGIN
INSERT into students_log VALUES (user(), CONCAT('Update Student Record ', OLD.name, ' Previous Class :',
OLD.class, ' Present Class ', NEW.class));
END
DELIMITER ;
在这个触发器中,我们首先指定了触发器的名称 after_update_studentsInfo 。然后,指定触发事件。第三,我们指定了与触发器关联的表名。最后,我们在触发器体内编写触发器逻辑,对“students”表进行更新并将日志信息保存在“students_log”表中。
如何调用AFTER UPDATE触发器?
首先,我们将使用以下语句更新“students”表,以调用上述创建的触发器:
mysql> UPDATE students SET class = class + 1;
接下来,我们将从 students 和 students_log 表中查询数据。我们可以看到,在查询执行后,表已经被更新。请参考下面的输出:
再次,我们将从存储当前用户ID和有关当前更新的描述的students_log表中查询数据。请参见下面的输出:
如何在MySQL Workbench中创建AFTER UPDATE触发器?
要在Workbench中创建AFTER UPDATE触发器,首先启动MySQL Workbench并使用用户名和密码登录。我们将获得如下的用户界面:
现在,请按照以下步骤创建一个AFTER UPDATE触发器:
1. 转到 导航 选项卡,点击 模式 菜单。它将显示在MySQL数据库服务器中可用的所有数据库。
2. 选择数据库(例如, mystudentdb )。然后,双击所选模式。它会显示包含表、视图、函数和存储过程的 子菜单 。请参阅下面的屏幕截图。
3. 展开 Tables 子菜单,并选择要创建触发器的表。然后,右键单击所选表格( 例如 ,students),然后单击 Alter Table 选项。请参见下面的图片:
4. 点击 ** Alter Table ** 选项将会显示如下页面:
5. 现在,点击之前章节中显示的 触发器 选项卡,该选项卡位于 红色矩形框 内,然后选择 时间/事件 AFTER UPDATE。我们会注意到有一个 (+) 图标按钮 用于添加触发器。点击该按钮,我们将在触发器中得到一个基于选择时间/事件的默认代码:
6. 现在,完成触发器代码,再次检查它们,如果没有发现错误,请点击 应用 按钮。
7. 点击“Apply”按钮后,点击“ 完成 按钮以完成该过程。
8. 如果我们查看模式菜单,可以看到在” 学生” 表下面的” student_update_trigger” 如下所示: