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 OR NEW.exbudget != OLD.exbudget THEN
INSERT into FC_Output.fcevent set type = 2, tabid = 1, level = 1, userid = NEW.userid, ustatid = NEW.ustatid, exbudget = NEW.exbudget;
end if;
ELSE
INSERT into FC_Output.fcevent set type = 1, tabid = 1, level = 1, userid = NEW.userid, ustatid = NEW.ustatid, exbudget = NEW.exbudget;
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语句

也就是:

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模式和数据库同步

 

 

转载于:https://www.cnblogs.com/20120810bubu/archive/2013/04/16/3024080.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值