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;
转载于:https://blog.51cto.com/jingshanls/1689849