zoukankan      html  css  js  c++  java
  • MySQL中触发器

    触发器是与某个事件相关的特殊存储过程,与存储过程不同的是,存储过程需要用 call 调用而出发器不需要使用call调用调用。

    也就是自己预先定义好了,当某个事件发生时,就会自动出发触发器进行相关的操作。

    仅对 insert 、 update 、delete 有效,对select无。

    五要素

    trigger_name :触发器名字,其实这个为了便于对触发器的修改与删除而存在。

    trigger_time:触发事件,在事件触发前执行还是出发后执行。

    tigger_action:触发的动作。

    listen_object:监听对象。

    listen_action:监听的动作。

    下面是一个创建触发器的模板:

    create trigger trigger_name  trigger_time  listen_action  ON   listen_object
    FOR EACH ROW
    BEGIN
        trigger_action;
    ENG$

    注意:由于MySQL默认的是 ; 为语句结束符,因此在这里需要修改,我修改为$:delimeter  $。

    添加订单时,库存减少

    订单是原先没有的,如果触发器的事件要引用新添加的订单的信息,那么就要用 new.列明,进行引用数据。

    create trigger order_shop AFTER INSERT ON `order`
    FOR EACH ROW 
    BEGIN
    update shop set  shop_count = shop_count-new.order_count where shop_id = new.shop_id;
    END$

    删除订单,库存增加

    create trigger delete_order BEFORE DELETE ON `order`
    FOR EACH ROW 
    BEGIN
    update shop set  shop_count = shop_count+OLD.order_count where shop_id = OLD.shop_id;
    END$

    注意:这里引用数据是使用 old.列明 ,原因在于引用的数据是已经存在了,所以用old

    修改订单 ,修改库存

    create trigger change_order AFTER UPDATE ON `order`
    FOR EACH ROW 
    BEGIN
    update shop set  shop_count = shop_count+old.order_count - new.order_count where shop_id = new.shop_id;
    END$

    注意:这里都用到了old和new关键字,让库存加上原来的数据再减去新数据。

    查看所有的触发器:

    show triggers;

    触发器 after 与 before 区别

    after  是 先完成数据的增删改再触发
    before  是 先完成触发在再增删改。  eg:限购

    例如:没人仅限购五件商品,大于5的都设为5

    create trigger example_before  BEFORE INSERT ON `order`
    FOR EACH ROW 
    BEGIN
        IF new.order_count>5 THEN 
            SET  NEW.order_count = 5;
        END IF;
    update shop set  shop_count = shop_count-new.order_count where shop_id = new.shop_id;
    END$
  • 相关阅读:
    十六、JSONObject与JSONArray使用-不刷新页面做回写显示
    十二、js去掉空格_比较字符长度_中英文判断_页面初始化_简体字与繁字体判断
    十、页面加载时对复选框、下拉列表、单选框默认进行选中及提交请求时判断单选按钮是否选中
    一、什么是Velocity及简单示例
    十八、oracle查看、扩展表空间及linux服务器硬盘容量大小查看
    接口限流算法
    浅析负载均衡的6种算法,Ngnix的5种算法
    今天是JAVA诞生日
    浅谈Spring中JDK动态代理与CGLIB动态代理
    Docker基本命令汇总
  • 原文地址:https://www.cnblogs.com/webph/p/7169085.html
Copyright © 2011-2022 走看看