mysql5-触发器的使用

8 篇文章 0 订阅
delete触发器
delete触发器在delete语句执行之前或之后执行。需要知道以下两点:
1.delete触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行
2.OLD中的值全都是只读,不能更新
下面例子演示使用OLD保存将要删除的行到一个存档表中
create trigger deleteorder before delete on orders
for each row
begin 
  insert into archive_orders(order_num,order_date,cust_id)
  values(old.order_num,old.order_date,old.cust_id);  
end;
在任意订单被删除订单前,将执行此触发器。它使用一条insert语句将old中的值(要被删除的订单)保存到一个名为archive_orders的存档表中(为实际使用这个例子,你需要用与orders相同的列创建一个名为archive_orders的表)
使用before delete触发器的有点(相对于after delete 触发器来说)为。如果由于某种原因,订单不能存储,delete本身将被放弃。
多语句触发器:正如所见。着在此例子中并不是必须的,不过也没有害处。使用begin end块的好处是触发器能容纳多条sql语句(在begin end块中一条挨着一条)
update触发器
update触发器在update语句执行之前或者之后执行。需要知道以下几点
1.在update触发器代码中,你可以医用一个名为old的虚拟表访问以前(update语句前)的值,引用一个铭文new的虚拟表访问新更新的值;
2.在before update触发器中,new中的值可能也被更新(允许更改将要用于update语句中的值);
3.old中的值全都是只读,不能更新
下面例子:爆炸州名缩写总是大写(不管update语句中给出的是大写还是小写)
create trigger updatevendor before update on vendors
for each row set new.vend_state = upper(new.vend_state)
显然,任何数据进化都需要在update语句之前进行,就像这个例子中一样。每次更新一个行时,new.vend_state中的值(将用来更新表行的值)都用upper(new.vend_state)替换


关于mysql5版本中,触发器的进一步的了解。

1.与其他的DBMS相比,MySql 5 中支持的触发器相当初级。未来MySql版本中有一些改进和增强触发器的支持计划
2.创建触发器可能需要特殊的安全访问权限,但是,触发器的执行是自动的。如果insert/update或delete语句能够执行,则相关的触发器也能执行
3.应该用触发器来爆炸数据的一致性(大小写/格式等),则相关的触发器也能执行
4.触发器的一种非常有意思的使用是创建审计跟踪。使用触发器,把更改(如果需要,甚至还有之前和之后的状态)记录到另一个表非常容易

5.遗憾的是,MySql触发器中不支持call语句。着表示不能从触发器内调用存储过程。所需的存储过程代码需要复制到触发器内

更新:

1.针对版本问题更新  5.6和5.7语法规范 对于触发器而言 使用 二进制存储的时候会遇到触发器失效的问题

表 VALUES(new.字段 );

以此方式即可处理5.6版本处理的触发器 

5.7版本的mysql没有影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值