Mysql 简明教程

MySQL - After Insert Trigger

Trigger 只被简单地定义为对事件的响应。在 MySQL 中,触发器是驻留在系统目录中的特殊存储过程,它会在执行某一事件时执行。这些事件包括 SQL 语句,如 INSERT、UPDATE 和 DELETE 等。

它被称为特殊存储过程,因为它不需要像其他存储过程那样显式调用。只要触发了所需事件,触发器就会自动起作用。

MySQL After Insert Trigger

After Insert Trigger 是 MySQL 数据库支持的行级触发器。顾名思义,After Insert Trigger 会在将值插入数据库表后立即执行。

具体来说,每当在数据库中执行 INSERT 语句时,该值首先会插入表中,然后执行触发器。因此,不能使用 AFTER INSERT 触发器来更新新插入的行。

Syntax

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

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name FOR EACH ROW
BEGIN
   -- trigger body
END;

Example

让我们看一个展示 AFTER INSERT 触发器的示例。在这里,我们使用以下查询创建名为 USERS 的新表,其中包含应用程序用户的详细信息 −

CREATE TABLE USERS(
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(100) NOT NULL,
   AGE INT NOT NULL,
   BIRTH_DATE VARCHAR(100),
   PRIMARY KEY(ID)
);

现在,让我们创建另一个表 'PUSH_NOTIFICATIONS',该表用于存储消息以便在用户的生日时作为推送通知发送给他们 −

CREATE TABLE PUSH_NOTIFICATIONS(
   ID INT AUTO_INCREMENT,
   BIRTH_DATE VARCHAR(100),
   NOTIFICATIONS VARCHAR(255) NOT NULL,
   PRIMARY KEY(ID)
);

使用以下 CREATE TRIGGER 语句,在 USERS 表上创建一个新的触发器 after_trigger ,以将值插入 PUSH_NOTIFICATIONS 表中 −

DELIMITER //
CREATE TRIGGER after_trigger AFTER INSERT ON USERS FOR EACH ROW
BEGIN
   IF NEW.BIRTH_DATE IS NOT NULL THEN
   INSERT INTO PUSH_NOTIFICATIONS VALUES
   (new.ID, new.BIRTH_DATE, CONCAT('Happy Birthday, ', NEW.NAME, '!'));
END IF;
END //
DELIMITER ;

Insert values into the USERS table using the regular INSERT statement as shown below −

INSERT INTO USERS (NAME, AGE, BIRTH_DATE) VALUES
('Sasha', 23, '24/06/1999');
('Alex', 21, '12/01/2001');

Verification

要验证触发器是否已执行,请使用 SELECT 语句显示 PUSH_NOTIFICATIONS 表 −