• Mysql 触发器Trigger


    一、触发器概念

           触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行。

    二、触发器语法四要素:

            1.监视地点(table)
            2.监视事件(insert/update/delete) 
            3.触发时间(after/before) 
            4.触发事件(insert/update/delete)

    三、触发器基本语法:  

    create trigger [triggerName] [triggerTime] [triggerEvent] on 表名 for each row #这句话在mysql是固定的 
    begin   
      sql语句;
    end;

      查看触发器: show triggers G;

      删除触发器:drop trigger triggerName;

    四、触发器中引用行变量

      注意:new表示改之前的记录,old表示改之后的记录。

      1、insert触发器(goods商品表,orders订单表) 

    create trigger order_goods after insert on orders for each row
    begin
        update goods set stock=stock-new.much where id=new.gid;
    end;

      2、delete触发器(goods商品表,orders订单表)

    create trigger order_goods after delete on orders for each row
    begin
        update goods set stock=stock+old.much where id=old.gid;
    end;

      3、update触发器(goods商品表,orders订单表) 

    create trigger order_goods after update on orders for each row
    begin
        update goods set stock=stock+old.much-new.much where id=old.gid;
    end;

    五、触发器做简单编程

      问题:只剩下3个商品,但客户想下单10个商品,如何防止库存为负?    

    create trigger order_goods defore insert on orders for each row
    begin
    
        declare
        tmp_num int;      #声明变量 tmp_num, 类型为int
    
        select stock into tmp_num from goods where id=new.gid;
        if new.much <= tmp_num then   
            update goods set stock=stock-new.much where id=new.gid;
        end if;
    
    end;
  • 相关阅读:
    Browsermob-Proxy 备忘
    Restic 备份工具
    GP刷新实体视图
    SDKMAN安装使用
    The requested module '/node_modules/.vite/vue.js?v=65afd58f' does not provide an export named 'default'
    Python——执行打包提示 ‘pyinstaller‘ 不是内部或外部命令,也不是可运行的程序
    python 打包exe 方法
    Python使用阿里云镜像
    使用Python项目生成所有依赖包的清单方式
    Git GuiUI的乱码问题如何解决
  • 原文地址:https://www.cnblogs.com/zgxblog/p/14151619.html
Copyright © 2020-2023  润新知