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

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