MySQL触发器初探

触发器是什么呢?

当你执行完一个动作(delete,insert,update)的时候,可以定义做的一些事。

只有表才支持触发器,视图不支持,临时表也不支持。

触发器可以定义为处理之前(before)或者处理之后(after)执行。

因此,每个表最多支持6个触发器。

触发器失败:如果before触发器失败,则mysql将不执行请求的操作,此外,

如果before触发器或语句本身失败,mysql将不执行after触发器(如果有的话)


1、insert触发器

首先insert触发器要注意下面几点:

        #在insert触发器内部,可以引用一个名为new的虚拟表,访问被插入的行;

        #再before insert触发器中,new的值可以被更新(允许更改被插入的值,也就是可以使你插入的不是你想插入的值)

        #对于auto_increment列,new在insert执行之前包含0,在insert执行之后包含新的自动生成的值。

看一个例子:

create trigger neworder after insert on orders

for each row select new.order_num into @newnum;

使用select @newnum即可检索。


2、delete触发器

首先delete触发器需要注意下面几点

        #在delete触发器代码内,你可以引用一个名为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;

使用begin和end块的好处就是使触发器能够容纳多条sql语句。


3、update触发器

同样需要了解的几点

        #在update触发器代码中;可以引用一个名为old的虚拟表来访问以前的数据

           同时也可以引用一个new的虚拟表来访问新更新的值。

        #在before update触发器中,new中的值可能也被更新(允许更改要用于update语句中的值)

        #old的值全部都是只读的,不能更新

看一个例子:

create trigger updatevendor before update on vendors

for each row set new.vend_state = upper(new.vend_state);


创建触发器可能需要特殊的安全访问权限,但是,触发器的执行是自动的。

应用触发器来保证数据的一致性(大小写,格式等)。在触发器中执行这类

处理的优点是它总是进行这种处理,而且透明的进行,与客户端无关。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值