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 语句将值插入到 USERS 表中:
INSERT INTO USERS (NAME, AGE, BIRTH_DATE) VALUES
('Sasha', 23, '24/06/1999');
('Alex', 21, '12/01/2001');