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触发器以将数据插入表中。