MySQL AFTER INSERT触发器

时间:2019-11-20 08:52:18  来源:igfitidea点击:

简介:在本教程中,您将学习如何在将数据插入另一个表之后创建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触发器以将数据插入表中。