mysql 触发器

学习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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章