2007-11-26 22:11

利用 Trigger 做出 CHECK()

最近才發現 MySQL5 並沒有支援 CHECK 指令,但為了部分欄位的定義域檢查只好使用 Trigger 來代替了,改寫了之前用 CHECK 寫的規則。
  1. CREATE TRIGGER `觸發器名稱` -- 命名原則與資料表一樣 
  2. { BEFORE | AFTER } -- 設置事件發生為前或後 
  3. { INSERT | UPDATE | DELETE } -- 設定觸發的事件 
  4. ON `資料表名稱` -- 設定引起觸發的資料表 
  5. FOR EACH ROW -- 針對行為觸發單位 
  6. {觸發的SQL指令} -- 這裡可以是任何合法的指令與複合句(BEGIN/END) 


範例:
  1. DELIMITER $$ -- 變更結束符號為 $$ 
  2.  
  3. CREATE TABLE t25( 
  4.    s1 INT,  
  5.    s2 CHAR(5), 
  6.    PRIMARY KEY (s1) 
  7. )ENGINE = INNODB $$ 
  8.  
  9. CREATE TRIGGER t25_bi BEFORE INSERT ON t25 
  10. FOR EACH ROW 
  11.   IF LEFT(NEW.s2,1)<>'A' THEN 
  12.      SET NEW.s1=0; 
  13.   END IF; 
  14. $$ 
  15.  
  16. CREATE TRIGGER t25_bu BEFORE UPDATE ON t25 
  17. FOR EACH ROW 
  18.   IF LEFT(NEW.s2,1)<>'A' THEN 
  19.      SET NEW.s1=0; 
  20.   END IF; 
  21. $$ 
  22.  
  23. DELIMITER ; -- 將結束符號改回 ; 


參考文件:
MySQL 5.0-触发器
MySQL 5.1参考手册 :: 21. 触发程序

0 回應: