2007-11-26

利用 Trigger 做出 CHECK()

最近才發現 MySQL5 並沒有支援 CHECK 指令,但為了部分欄位的定義域檢查只好使用 Trigger 來代替了,改寫了之前用 CHECK 寫的規則。

CREATE TRIGGER `觸發器名稱` -- 命名原則與資料表一樣
{ BEFORE | AFTER } -- 設置事件發生為前或後
{ INSERT | UPDATE | DELETE } -- 設定觸發的事件
ON `資料表名稱` -- 設定引起觸發的資料表
FOR EACH ROW -- 針對行為觸發單位
{觸發的SQL指令} -- 這裡可以是任何合法的指令與複合句(BEGIN/END)


範例:

DELIMITER $$ -- 變更結束符號為 $$

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;
$$

DELIMITER ; -- 將結束符號改回 ;


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

0 回應: