触发器
一、定义:由insert、update、delete等事件来触发某种特定操作。触发器触发的执行语句可以有多个。
注:触发器中不能包含start transaction、commit或rollback等关键词,也不能包含call语句。
1、格式:
create trigger 触发器名 berfor|after 触发事件
on 表名 for each row
执行语句
2、格式:
mysql>DELIMITER &&
mysql>create trigger 触发器名 berfor|after 触发事件
on 表名 for each row
begin
执行语句;
执行语句;
end
&&
mysql>DELIMITER ;
注:for each row表示任何一条记录上的操作满足触发事件都会触发该触发器.MYSQL默认是以“;”作为
结束执行语句。在创建触发器过程中需要用到分号,为了解决这个问题可以用delimiter语句
如:“delimiter &&”,可以将结束符号变成“&&”,当触发器创建完成后可以用命令“delimiter;”
来将结束符号变成分号。一个表在相同触发时间的相同触发事件,只能创建一个触发器。
二、查询触发器
1、语句:show triggers \G,该语句查询指定数据库中所有的触发器
2、查询information_schema数据库下的triggers表:
select * from information_schema.triggers where trigger_name='触发器名' \G
三、删除触发器
drop trigger 触发器名;
四、触发器的应用
1、对于insert而言,新增的行用new来表示
行中的每一列的值用new.列名来表示
create trigger tg2
after insert on o
for each row
begin
update g set num=num-new.much where id=new.gid;
end$
2、对于delete而言,要删除的行用old表示
3、对于update而言,要更新行旧值的用old表示,新值的用new表示
create trigger tg2
after insert on o
for each row
begin
update g set num=num+old.much-new.much where id=old.gid;
end$
4、触发事件先于监视事件发生
create trigger tg5
before insert on o
begin
if new.much >5 then
set new.much =5;
end if;
update g set num=num-new.much where id=new.gid;
end$