美文网首页
触发器(trigger)

触发器(trigger)

作者: 抬起头挺起胸 | 来源:发表于2017-11-09 11:23 被阅读0次

定义

触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL

也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。

触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

语法

CREATE TRIGGER trigger_name //触发器名称

trigger_time //触发时间 after | before

trigger_event //触发事件 insert | update |delete

ON tbl_name  //在哪一个表

FOR EACH ROW

trigger_stmt //执行的sql语句

查看触发器

show triggers [from 数据库名]

删除触发器

drop trigger [if exists] [数据库名.]trigger_name

执行顺序

一般都是在innodb上建立触发器,因为建立的表支持事务,trigger是事务安全的,如果执行失败的话,会有回滚操作

1.如果 BEFORE 触发器执行失败,SQL 无法正确执行。

2.SQL 执行失败时,AFTER 型触发器不会触发。

3.AFTER 类型的触发器执行失败,SQL 会回滚

举例

    1.购物车与库存

CREATE TRIGGER insert_change before insert on `order` for each row

begin

update kucun set num=num-new.num where id=new.id;

end

2.购物车与库存

create trigger update_change before update on `order` for each ROW

begin

update kucun set num=num-(new.num-old.num) where id = new.id;

end

3.优化版本

create trigger update_change before update on `order` for each ROW

begin

set @k_num=(select num from kucun where id=new.id);

if new.num > @k_num+old.num then

set new.num=@k_num+old.num;

end if;

update kucun set num=num-(new.num-old.num) where id = new.id;

end

相关文章

网友评论

      本文标题:触发器(trigger)

      本文链接:https://www.haomeiwen.com/subject/hrspmxtx.html