触发器(trigger)

定义

触发器是一个特殊的存储过程,不同的是存储过程要用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 修改mysql定界符 delimiter+定界符eg:delimiter $ 查看所有触发器 show trigg...
    诗人小坏阅读 1,003评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • SQLite 触发器(Trigger) 是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。 语法 创...
    SingleDiego阅读 496评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • 女儿旧作~ 长发 ——语若 第一章 兰台,这里,其实就是一块天然的巨石,是永夜城最冷的地方。 明玉静静垂眸,凝视着...
    烟在水上阅读 430评论 0 0