2009年5月19日 星期二

mysql trigger

mysql裡面一直以來都沒有trigger的功能,在5.0.11版之後加入了這一個功能。
就我所知,大部份的網站系統都是使用myisam的資料格式。
其實原因很簡單,因為備份容易。
然而現在myisam的格式也可以使用trigger的功能來進行某些項目。
使用trigger可以讓php的程式裡少撰寫很多行。
比如說:將一筆網誌的回應刪除,也要順便將網誌的總回應數-1,也要將回文的人的留言數-1
以這個例子,一般來說要query三次;但如果用trigger的話,只需要query一次,其它順便做的事,就交給trigger吧!
資料來源: http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
要做測試很簡單
先建立四個table
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0 );
接著新增trigger,記得,新增trigger請在mysql client裡下,不要用phpmyadmin
delimiter |
CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
| delimiter ;
NSERT INTO test1 VALUES (1), (3), (1), (7), (1), (8), (4), (4);
你會發現在test2, test3, test4都有新增
要查看已新增的trigger,下
show triggers;
要刪除已新增的trigger,下
drop trigger testref ;
在mysql replication的情況下。
create trigger在master裡面下。
slave server也會新增trigger。
在master server裡面下insert sql,slave server也能正常執行。