一、触发器概念
触发器(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;