MySQL AFTER INSERT Trigger

摘要:在本教程中,您将学习如何创建 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 触发器

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)
MySQL AFTER INSERT 触发器示例

三、从reminders表中查询数据:

SELECT * FROM reminders;    
Code language: SQL (Structured Query Language) (sql)
MySQL AFTER INSERT 触发器输出

我们在members表中插入了两行。但是,只有第一行的出生日期值为NULL ,因此触发器仅将一行插入reminders表中。

在本教程中,您学习了如何创建 MySQL AFTER INSERT触发器,以便在将数据插入另一个表后将数据插入到一个表中。

本教程有帮助吗?