Mysql之Trigger基本语法
mysql5新添加的功能。
1 创建基本语法:
create trigger trigger_name trigger_time trigger_event
on table_name for each row trigger_stmt
trigger_name:⾃⾏定义触发器名字;
trigger_time:标识触发时机,before 或 after;
trigger_event:标识触发事件,insert,update 或 delete;
table_name:标识建⽴触发器的表名;
trigger_stmt:触发器程序体,可⽤begin和end作为开始和结束。
2 实例(a copy)
CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER trig_useracct_update
AFTER UPDATE
ON SF_User.useracct FOR EACH ROW
BEGIN
IF OLD.ulevelid = 10101 OR OLD.ulevelid = 10104 THEN
IF NEW.ulevelid = 10101 OR NEW.ulevelid = 10104 THEN
if NEW.ustatid != OLD.ustatid budget != budget THEN
INSERT into FC_Output.fcevent set type = 2, tabid = 1, level = 1, userid = NEW.userid, ustatid = NEW.ustatid, exbudget = budget;
end if;
ELSE
INSERT into FC_Output.fcevent set type = 1, tabid = 1, level = 1, userid = NEW.userid, ustatid = NEW.ustatid, exbudget = budget;
END IF;
END IF;
END;
关键字old/new:表⽰修改前和修改后的列值。old列只读,new列可在触发器程序中再次赋值。
注意:begin和end之间通常使⽤顺序、判断和循环等语句,⽤来实现⼀般程序需要的逻辑功能。如果是简单的 insert/update/delete语句,就不需要 begin和end 了。
3 查看触发器的基本语法
show triggers from database_name like "usermaps%"      //查看数据库中名字和usermaps匹配的触发器
或者
show triggers        //查看所有的触发器,适⽤于不了解触发器信息并且触发器不多的情况下
另外,mysql中有⼀个information_schema.TRIGGERS表,存储所有库中的触发器
desc  information_schema.TRIGGERS  //查看。然后通过触发器的不同属性进⾏查询。
select * from information_schema. TRIGGERS where TRIGGER_NAME= 'trig_useracct_update'\G;
4 删除触发器
drop trigger [schema_name.]trigger_name
5 触发的类型
before/after * insert/update/delete=6
在⼀个表上最多建6个触发器。
另外注意,mysql定义的load data和replace语句也会引起上述触发器的触发。
load data语句⽤于将⼀个⽂件装⼊到⼀个数据表中,相当于⼀系列insert操作;replace=delete语句(删除与插⼊数据相同索引的数据)+insert 语句
tabletime也就是:
Insert型触发器:可能通过insert语句,load data语句,replace语句触发;
Update型触发器:通过update语句触发;
Delete型触发器:可能通过delete语句,replace语句触发。
6 更多(有待实践)
1) mysql的引擎室innoDB,由此建⽴的表都是事务性表。对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执⾏的所有更改将回滚。那么,
如果before触发器执⾏失败,sql也会执⾏失败;
如果sql在执⾏失败时,after型触发器不会执⾏;
如果after触发器执⾏失败,sql会回滚。
2) mysql触发器程序执⾏的顺序
3) mysql的bin-log模式和数据库同步

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。