MySQL - 插入后触发器



触发器简单来说是对事件的响应。在 MySQL 中,触发器是一种特殊的存储过程,驻留在系统目录中,每当执行事件时都会执行。这些事件包括 SQL 语句,例如 INSERT、UPDATE 和 DELETE 等。

它被称为特殊的存储过程,因为它不需要像其他存储过程那样显式调用。触发器在每次触发所需事件时都会自动执行。

MySQL 插入后触发器

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

行级触发器是一种每当修改一行时就会触发的触发器。简单来说,对于在表中进行的每次事务(如插入、删除、更新),都会有一个触发器自动执行。

详细说明,每当在数据库中执行 INSERT 语句时,值会首先插入到表中,然后执行触发器。因此,无法使用 AFTER INSERT 触发器更新新插入的行。

语法

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

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

示例

让我们看一个演示 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 语句将值插入到 USERS 表中,如下所示:

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

验证

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

ID BIRTH_DATE NOTIFICATIONS
1 24/06/1999 生日快乐,Sasha!
2 12/01/2001 生日快乐,Alex!
广告