触发器的作用是当表上有对应SQL语句发生时,则触发执行。
1.语法
CREATE
[DEFINER = {user|CURRENT_USER}]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
trigger_time: {BEFORE|AFTER}
trigger_event: {INSERT|UPDATE|DELETE}
trigger_order: {FOLLOWS|PRECEDES} other_trigger_name
说明:
trigger_name:触发器的名称,不能与已经存在的触发器重复;
trigger_time:{ BEFORE | AFTER },表示在事件之前或之后触发;
trigger_event::{ INSERT |UPDATE | DELETE },触发该触发器的具体事件;
tbl_name:该触发器作用在tbl_name上;
2.关键说明
Definer关键词用来指定trigger的安全环境;
trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的每行数据修改前或者后执行;
trigger_event指定触发该触发器的集体事件:
INSERT 当新的一行数据插入表中时触发,如执行insert,load data,replace语句插入新数据
UPDATE 当表的一行数据被修改时触发,如执行update语句时
DELETE 当表的一行数据被删除时触发,如执行delete,replace语句时
当执行insert into...on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器;
从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下,按照创建时间依次执行,通过指定FOLLOWS/PRECEDES改变执行顺序,即FOLLOWS时表示新创建的触发器执行,PRECEDES则表示新触发器先执行;
trigger_body 表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段,OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示数据被插入或修改之后的字段数据;
3.实例
4.查看触发器(information_schema)
5.删除触发器
DROPTRIGGER[IFEXISTS] [schema_name.]trigger_name
if exists用来避免删除不存在的触发器时引发的报错
当你执行drop table时,表上的触发器也被drop掉了
mysql> drop trigger simple_trigger;Query OK, 0 rows affected (0.00 sec)
原文链接:https://www.cnblogs.com/tongxiaoda/p/8031891.html
网友评论