MySQL - 插入後觸發器



觸發器簡單來說是對事件的響應。在 MySQL 中,觸發器是一種特殊的儲存過程,駐留在系統目錄中,每當執行事件時都會執行。這些事件包括 SQL 語句,例如 INSERT、UPDATE 和 DELETE 等。

它被稱為特殊的儲存過程,因為它不需要像其他儲存過程那樣顯式呼叫。觸發器在每次觸發所需事件時都會自動執行。

MySQL 插入後觸發器

插入後觸發器是 MySQL 資料庫支援的行級觸發器。顧名思義,插入後觸發器在將值插入資料庫表後立即執行。

行級觸發器是一種每當修改一行時就會觸發的觸發器。簡單來說,對於在表中進行的每次事務(如插入、刪除、更新),都會有一個觸發器自動執行。

詳細說明,每當在資料庫中執行 INSERT 語句時,值會首先插入到表中,然後執行觸發器。因此,無法使用 AFTER INSERT 觸發器更新新插入的行。

語法

以下是建立 MySQL 中 AFTER INSERT 觸發器的語法:

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name FOR EACH ROW
BEGIN
   -- trigger body
END;

示例

讓我們看一個演示 AFTER INSERT 觸發器的示例。在這裡,我們使用以下查詢建立一個名為 USERS 的新表,其中包含應用程式使用者的詳細資訊:

CREATE TABLE USERS(
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(100) NOT NULL,
   AGE INT NOT NULL,
   BIRTH_DATE VARCHAR(100),
   PRIMARY KEY(ID)
);

現在,讓我們建立另一個表'PUSH_NOTIFICATIONS',用於儲存訊息,以便在使用者的生日時作為推送通知傳送給他們:

CREATE TABLE PUSH_NOTIFICATIONS(
   ID INT AUTO_INCREMENT,
   BIRTH_DATE VARCHAR(100),
   NOTIFICATIONS VARCHAR(255) NOT NULL,
   PRIMARY KEY(ID)
);

使用以下 CREATE TRIGGER 語句,在 USERS 表上建立一個新的觸發器 after_trigger,以將值插入到 PUSH_NOTIFICATIONS 表中:

DELIMITER //
CREATE TRIGGER after_trigger AFTER INSERT ON USERS FOR EACH ROW
BEGIN
   IF NEW.BIRTH_DATE IS NOT NULL THEN
   INSERT INTO PUSH_NOTIFICATIONS VALUES
   (new.ID, new.BIRTH_DATE, CONCAT('Happy Birthday, ', NEW.NAME, '!'));
END IF;
END //
DELIMITER ;

使用常規 INSERT 語句將值插入到 USERS 表中,如下所示:

INSERT INTO USERS (NAME, AGE, BIRTH_DATE) VALUES 
('Sasha', 23, '24/06/1999');
('Alex', 21, '12/01/2001');

驗證

要驗證觸發器是否已執行,請使用 SELECT 語句顯示 PUSH_NOTIFICATIONS 表:

ID BIRTH_DATE NOTIFICATIONS
1 24/06/1999 生日快樂,Sasha!
2 12/01/2001 生日快樂,Alex!
廣告