最近在研究 DBMS 的 trigger,不同 DBMS 的 trigger 的功能上差異不小,這裡僅對 MySQL 的 trigger 做筆記。
trigger 的意思同詞一樣,設計目的是讓 DB 的特定事件發生以後,去執行指定的動作。例如某 table 新增了一筆資料以後,將該筆資料記錄到另一個 table。
這次先使用「當使用者註冊成功以後,在 audit log 留下使用者 ID 和註冊的時間。先來建立 users 和 user_audit_log 這二個 table:
CREATE TABLE `users` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_name` VARCHAR(200) NOT NULL,
`mail` varchar(255) NOT NULL
);
CREATE TABLE `user_audit_log` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`user_name` VARCHAR(200) NOT NULL,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP()
);
然後來看一下 trigger 的 語法,trigger 可以針對 insert / update / delete 這幾個動作作出反應,另外也可以將 trigger 的動作放在以上幾個動作的之前 BEFORE 與之後 AFTER 執行,也就是說總共有以下這 6 種 trigger:


