1 什么是触发器

触发器是自动化sql程序,由插入、更新、和删除事件来触发。

当面对复杂业务关系,在程序上难以实现时

当程序上实现较为复杂,希望在数据库内实现时候。

能让外面程序完成的逻辑,尽量外包程序处理。


2 触发器的语法

create trigger <触发器名称>

{befroe | after}

{insert|update|delete}

on<表名称>

for each row

<触发器sql语句>


创建简单的触发器


新增动作触发器

mysql> create trigger t1_ai

    -> after insert on t1

    -> for each row

    -> update t2 set

    -> u_t = u_t+1,

    -> s_t = s_t + new.salary;

Query OK, 0 rows affected (1.27 sec) ;


其中 new 表示新增的数据。

删除动作 触发器

mysql> create trigger t1_ad after delete on t1 for each row update t2 set u_t = u_t-1, s_t = s_t - old.salary;


创建多执行语句触发器

gegin he  end

用 流程控制语句。


delimiter //  设定结束符号

create trigger t3_ai

after insert on t3

for each row

if new.gid =0 then

update t4 set user_total = user_total+1;

else  update t4 set vip_total = vip_total+1;

endif

// 设定结束符。


begin 

触发器语句

end


带 while 和 repeat 语句的触发器。


产生获奖信息表


delimiter //

create trigger t5_ai

after insert on t5

for each row

begin

declare mnum int default 0;

declare wnum int;

declare tnum int;

declare rnum int;

declare tdate date;

select count(*) into tnum from t3;

set tdate = new.event_date;

set wnum= new.wnnum;

t5_loop:loop

set mnum=mnum+1;

set rnum=floor(1+rand()*tnum);

insert into t6 select id,name,gid,tdate from t3 where id=rnum;

if mnum>=wnum

then leave t5_loop;

end if;

end loop t5_loop;

end;

//

这个长长的触发器。



repeat 语句的触发器。 loop


repeat

触发器语句

end repeat


while 

end while


查看触发器

show triggers\G;


drop trigger name;即可

select *  information_schema;