MySQL AFTER INSERT触发器
简介:在本教程中,您将学习如何在将数据插入另一个表之后创建MySQL AFTER INSERT触发器以将数据插入表中。
MySQL AFTER INSERT触发器简介
在表上发生插入事件后,将自动调用MySQL AFTER INSERT触发器。
下面显示了创建MySQL AFTER INSERT触发器的基本语法:
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
trigger_body
使用以下语法:
首先,在CREATE TRIGGER关键字之后指定要创建的触发器的名称。
其次,使用AFTER INSERT子句指定调用触发器的时间。
第三,在ON关键字之后指定要在其上创建触发器的表的名称。
最后,指定触发器主体,该主体由一个或多个在调用触发器时执行的语句组成。
如果触发器主体具有多个语句,则需要使用BEGIN END块并更改默认的定界符:
DELIMITER $$
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
-- statements
END$$
DELIMITER ;
在AFTER INSERT触发器中,您可以访问新值,但不能更改它们。
另外,您无法访问OLD值,因为INSERT触发器上没有OLD。
MySQL AFTER INSERT触发器示例
考虑以下AFTER INSERT触发器示例。
设置样本表
首先,创建一个名为members的新表:
DROP TABLE IF EXISTS members;
CREATE TABLE members (
id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255),
birthDate DATE,
PRIMARY KEY (id)
);
其次,创建另一个称为提醒的表,该表将提醒消息存储到成员。
DROP TABLE IF EXISTS reminders;
CREATE TABLE reminders (
id INT AUTO_INCREMENT,
memberId INT,
message VARCHAR(255) NOT NULL,
PRIMARY KEY (id , memberId)
);
创建AFTER INSERT触发器示例
以下语句创建一个AFTER INSERT触发器,如果该成员的生日为NULL,则将提醒插入到提醒表中。
DELIMITER $$
CREATE TRIGGER after_members_insert
AFTER INSERT
ON members FOR EACH ROW
BEGIN
IF NEW.birthDate IS NULL THEN
INSERT INTO reminders(memberId, message)
VALUES(new.id,CONCAT('Hi ', NEW.name, ', please update your date of birth.'));
END IF;
END$$
DELIMITER ;
在此触发器中:
首先,触发器的名称是在CREATE TRIGGER子句中指定的after_members_insert:
CREATE TRIGGER after_members_insert
其次,触发事件是:
AFTER INSERT
第三,与触发器关联的表是成员表:
ON members FOR EACH ROW
最后,如果成员的生日为NULL,则在触发器主体内,将新行插入提醒表。
测试MySQL AFTER INSERT触发器
首先,将两行插入成员表:
INSERT INTO members(name, email, birthDate)
VALUES
('John Doe', '[email protected]', NULL),
('Jane Doe', '[email protected]','2000-01-01');
其次,从成员表中查询数据:
SELECT * FROM members;
第三,从提醒表中查询数据:
SELECT * FROM reminders;
我们在成员表中插入了两行。
但是,只有第一行的生日日期值为NULL,因此触发器仅将一行插入提醒表。
在本教程中,您学习了如何在将数据插入另一个表之后创建MySQL AFTER INSERT触发器以将数据插入表中。

