學習mysql數據庫,觸發器是需要重點關注的部分,多行命令觸發器是最常用的。
下面先明白delimiter的用法:
默認情況下,delimiter是分號“;”。在命令行客戶端中,如果有一行命令以分號結束,那麼回車後,mysql將會執行該命令。
但有時候,不希望MySQL這麼做。因爲可能輸入較多的語句,且語句中包含有分號。
這種情況下,就可以使用delimiter,把delimiter後面換成其它符號,如//或$$。
完成後,在delimiter ;恢復默認。
此命令多用在定義子程序,存儲過程、觸發程序等mysql自己內嵌小程序中。
這是一個簡單的例子:
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); insert into test3 values(null),(null),(null),(null),(null),(null),(null),(null); insert into test4(a4) values(0),(0),(0),(0),(0),(0),(0),(0); 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 ; --------語句結束符恢復默認。
一下是網上搜來的一些例子:
示例一 delimiter // create trigger InsertUser before insert on user for each row Begin insert into user_group(uid,gid) values(new.uid,'group4444444444'); end;// delimiter ; 示例二 delimiter // create trigger InsertUser before insert on user for each row Begin IF new.Type=2 then insert into user_group(uid,gid) values(new.uid,'group4444444444'); else insert into user_group(uid,gid) values(new.uid,'group55555555555') END IF; end;// delimiter ; 示例三: delimiter // create trigger InsertUser before insert on user for each row Begin IF new.type=1 then insert into user_group(uid,gid) values(new.uid,'578d3369633b47bd9c1fe8bf905cbfb1'); END IF; IF new.type=2 then insert into user_group(uid,gid) values(new.uid,'387bcd57fc5a4c3c9de83ee210fef661'); END IF; end;// delimiter ; 以上例子摘自:http://database.51cto.com/art/201010/229386.htm