一、触发器是由事件来触发某个操做,这些事件包括insert语句、update语句和delete语句。当数据库系统执行这些事件时,会激活触发器执行相应操做。MySQL从5.0.2开始支持触发器。使用触发器能够保证某些操做之间的一致性。数据库
二、建立一个执行语句的触发器orm
create trigger 触发器名 before|after 触发事件 on 表名 for each row 执行语句;事件
before和after参数指定触发器执行的时间;get
触发事件包括insert、update和delete;it
for each row表示任何一条记录上的操做知足触发条件都会触发触发器;io
执行语句指触发器被触发后执行的程序form
create trigger dept_trig1 before insert on department for each row insert into trigger_time values(now());class
三、建立多个执行语句的触发器test
create trigger 触发器名 before|after 触发事件 on 表名 for each row begin 执行语句列表 end;date
通常状况下,MySQL默认以';'结束执行语句。在建立触发器过程当中须要用到该符号。在执行语句列表也用';'分隔执行语句,所以能够用delimiter语句。
delimiter &&
create trigger dept_trig2 after delete
on department for each row
begin
insert into trigger_time values('21:01:01');
insert into trigger_time values('22:01:01');
end
&&
delimiter;
MySQL中,一个表在相同触发时间的相同触发事件只能建立一个触发器。如触发事件insert,触发时间为after的触发器只有一个。
四、查看触发器
指查看数据库中已存在的触发器的定义、状态和语法等信息。查看方法包括show triggers语句和查询information_schema数据库下的triggers表等。
show triggers \G //查看全部的触发器,不适合触发器不少的状况
select * from information_schema.triggers;
select * from information_schema.triggers where trigger_name='触发器名';
五、MySQL中,触发器执行的顺序是before触发器、表操做(insert、update和delete)和after触发器
create trigger before_insert before insert on department for each row insert into trigger_test values(null, "before_insert");
create trigger after_insert before insert on department for each row insert into trigger_test values(null, "after_insert");
激活触发器时,对触发器的执行语句存在一些限制。如,触发器中不能包含start transaction、commit或rollback等关键词也不能包含call语句。
在触发器执行过程当中,任何步骤出错都会阻止程序向下执行,对于普通表来讲,已经更新过的记录不能回滚,更新后的数据将继续保留在表中。
六、删除触发器
drop trigger 触发器名。
触发器名参数若是指指定名称会在当前数据库下查找该触发器,若是找到就删除。若是指定数据库,数据库系统会到指定的数据库下去查找触发器。
若是再也不须要某触发器,必定要将该触发器删除。