学习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
本文出自 “人自强,梦不息” 博客,请务必保留此出处http://yongbird.blog.51cto.com/7554149/1561741