摘要:在本教程中,您将学习如何创建 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
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
首先,在CREATE TRIGGER
关键字后指定要创建的触发器的名称。
其次,使用AFTER INSERT
子句指定调用触发器的时间。
第三,在ON
关键字后指定要在其上创建触发器的表的名称。
最后,指定触发器主体,该主体由调用触发器时执行的一个或多个语句组成。
如果触发器主体有多个语句,您需要使用BEGIN END
块并更改默认分隔符:
DELIMITER $$
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
-- statements
END$$
DELIMITER ;
Code language: SQL (Structured Query Language) (sql)
在AFTER INSERT
触发器中,您可以访问NEW
值,但无法更改它们。此外,您无法访问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)
);
Code language: SQL (Structured Query Language) (sql)
其次,创建另一个名为reminders
的表,用于存储给成员的提醒消息。
DROP TABLE IF EXISTS reminders;
CREATE TABLE reminders (
id INT AUTO_INCREMENT,
memberId INT,
message VARCHAR(255) NOT NULL,
PRIMARY KEY (id , memberId)
);
Code language: SQL (Structured Query Language) (sql)
创建AFTER INSERT
触发器示例
以下语句创建一个AFTER INSERT
触发器,如果成员的出生日期为NULL
,则该触发器将提醒插入reminders
表中。
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 ;
Code language: SQL (Structured Query Language) (sql)
在此触发器中:
首先,触发器的名称是CREATE TRIGGER
子句中指定的after_members_insert
:
CREATE TRIGGER after_members_insert
Code language: SQL (Structured Query Language) (sql)
其次,触发事件是:
AFTER INSERT
Code language: SQL (Structured Query Language) (sql)
三、触发器关联的表是members
表:
ON members FOR EACH ROW
Code language: SQL (Structured Query Language) (sql)
最后,在触发器主体内,如果成员的出生日期为NULL
,则将新行插入提醒表中。
测试 MySQL AFTER INSERT
触发器
首先,在members
表中插入两行:
INSERT INTO members(name, email, birthDate)
VALUES
('John Doe', 'john.doe@example.com', NULL),
('Jane Doe', 'jane.doe@example.com','2000-01-01');
Code language: SQL (Structured Query Language) (sql)
其次,从members
表中查询数据:
SELECT * FROM members;
Code language: SQL (Structured Query Language) (sql)
三、从reminders
表中查询数据:
SELECT * FROM reminders;
Code language: SQL (Structured Query Language) (sql)
我们在members
表中插入了两行。但是,只有第一行的出生日期值为NULL
,因此触发器仅将一行插入reminders
表中。
在本教程中,您学习了如何创建 MySQL AFTER INSERT
触发器,以便在将数据插入另一个表后将数据插入到一个表中。