zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    29. Divide Two Integers
    leetCode 17. Letter Combinations of a Phone Number
    查找
    快速排序
    希尔排序
    插入排序
    归并排序,还有非递归方式没写
    堆排序--还有递归法没有写
    c++实现字符串全排序
    归并排序
  • 原文地址:https://www.cnblogs.com/zgxblog/p/14151619.html
Copyright © 2011-2022 走看看