首页 > 技术文章 > Mysql 触发器Trigger

zgxblog 2020-12-17 20:02 原文

一、触发器概念

       触发器(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;

 

推荐阅读