MySQL AFTER UPDATE触发器

每当在与触发器关联的表上触发 UPDATE 事件时,都会自动调用 MySQL 中的 AFTER UPDATE 触发器。在本文中,我们将学习如何使用其语法和示例创建 AFTER UPDATE 触发器。

一、MySQL 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 ;  

限制

  • 我们可以访问旧行但不能更新它们。
  • 我们可以访问新行但不能更新它们。
  • 我们不能在VIEW上创建 AFTER UPDATE 触发器。

二、MySQL 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查询以查看表数据。

 

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 触发器?

要在工作台中创建 AFTER UPDATE 触发器,我们首先启动MySQL Workbench并使用用户名和密码登录。我们将获得如下界面:

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

1. 转到导航选项卡并单击Schema菜单。它将显示MySQL数据库服务器中所有可用的数据库。

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

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

4. 点击Alter Table选项,屏幕如下:

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

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

7. 单击“应用”按钮后,单击“完成”按钮完成该过程。

8. 如果我们查看模式菜单,我们可以在“students”表下看到student_update_trigger,如下所示:

热门文章

优秀文章