CREATE TRIGGER <trigger_name>
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <table_name>
FOR EACH ROW
<trigger_body>
表名_時機_事件,如 t26_bu (BEFORE UPDATE)FOR EACH ROW 逐列觸發 (MySQL 僅支援列級)| 事件 | 可用 | 說明 |
|---|---|---|
| INSERT | NEW | 新列值 |
| DELETE | OLD | 舊列值 |
| UPDATE | NEW, OLD | 修改前後值 |
CREATE TRIGGER t21_au BEFORE UPDATE ON t22
FOR EACH ROW
BEGIN
SET @old = OLD.s1;
SET @new = NEW.s1;
END;//
MySQL 不支援 CHECK,但可用 Trigger 模擬:
CREATE TABLE t25 (s1 INT, s2 CHAR(5), PRIMARY KEY(s1)) ENGINE=INNODB;
CREATE TRIGGER t25_bi BEFORE INSERT ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1) <> 'A' THEN SET NEW.s1 = 0; END IF;//
CREATE TRIGGER t25_bu BEFORE UPDATE ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1) <> 'A' THEN SET NEW.s1 = 0; END IF;//
違規時將 PK 設為 0 觸發主鍵衝突,達到攔截效果。
CREATE TRIGGER 權限 (5.0 預設僅 root 擁有)GRANT CREATE TRIGGER ON table TO userDROP TABLE 不會自動刪除關聯 TriggerDROP TRIGGER schema.triggerALTER TABLE 有 Trigger 時可能損壞資料庫 → 嚴禁對有 Trigger 的表執行 ALTERTrigger 較新,生產環境謹慎使用,建議先在測試庫驗證。