您好,欢迎访问一九零五行业门户网

TRIGGER:Mysql触发器

1. trigger简介 trigger是mysql的触发器,当建立触发器时,会监控特定的事件,当触发时会激活对象,处理trigger_stmt,即要执行的语句。比如表的新增一条记录时,你需要更新记录的值得总和,则可以用trigger来实现。 2. trigger创建语句 create trigger trig
1. trigger简介trigger是mysql的触发器,当建立触发器时,会监控特定的事件,当触发时会激活对象,处理trigger_stmt,即要执行的语句。比如表的新增一条记录时,你需要更新记录的值得总和,则可以用trigger来实现。2. trigger创建语句create trigger trigger_name trigger_time trigger_event on tbl_name for each row trigger_stmt
trigger_name:为触发器名称
trigger_time: 触发器激活时间,为before或after, 表明在表数据处理之前或之后
trigger_event: 触发激活的类型:下面三种
insert:将新行插入表时激活触发程序,例如,通过insert、load data和replace语句。
update:更改某一行时激活触发程序,例如,通过update语句。
delete:从表中删除某一行时激活触发程序,例如,通过delete和replace语句。
tbl_name : 操作表名称
trigger_stmt: 触发器要操作的语句3. 使用限制1)同一个表不能有同一种触发器:
例如,对于某一表,不能有两个before update触发程序。但可以有1个before update触发程序和1个before insert触发程序,或1个before update触发程序和1个after update触发程序。
2)必须是永久表,不能是temporary表或视图。4. trigger使用创建表和触发器 create table account (acct_num int, amount decimal(10,2)); create trigger ins_sum before insert on account for each row set @sum = @sum + new.amount;
new关键词为操作后的新值。 old表示操作之前的值。插入三行记录,读取@sum的值mysql> set @sum = 0;mysql> insert into account values(137,14.98),(141,1937.50),(97,-100.00);mysql> select @sum as 'total amount inserted';
返回值为 @sum的值是14.98 + 1937.50 – 100 = 1852.48。
对于触发程序是多行,使用begin ... end结构mysql> delimiter //mysql> create trigger upd_check before update on account -> for each row -> begin -> if new.amount set new.amount = 0; -> elseif new.amount > 100 then -> set new.amount = 100; -> end if; -> end;//mysql> delimiter ;
更新一条记录,查看值:update account set acct_num = 241 where acct_num=141;
由于上面的update触发了trigger,会使 amount的值设置为100.5. 查看已经建立的triggershow triggers
还可以在information_schema数据库的 triggers表中查看。6. 删除触发器drop trigger test.ins_sum;
test为数据库名,ins_sum为触发器名称7. 对失败的处理· 如果before触发程序失败,不执行相应行上的操作。
· 仅当before触发程序(如果有的话)和行操作均已成功执行,才执行after触发程序。
· 如果在before或after触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。· 对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将回滚。对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。
地址:http://blog.csdn.net/yonggang7/article/details/24552817
其它类似信息

推荐信息