最近看了燕十八mysql视频,想着写篇博客记录一下
文章上传整理与2017年9月26日 ,环境:win7-mysql5.6
触发器:
触发器就是让MySQL执行指定SQL语句之前/之后去自动执行某些操作或者说方法
结构:
CREATE TRIGGER `t1` //指定触发器名称
BEFORE //指定在sql执行之前后者之后 ,AFTER/BEFORE
UPDATE //哪些动作触发触发器update/insert/delete三选一
ON `t_test` //触发器的表
FOR EACH ROW //行级
begin //标记开始
//核心代码....
end; //标记结束
示例表:
一个订单表,一个产品表(库存表) ,订单表每修改或者增加一笔订单,相应的库存应当减少,假设库存为100
需求1:
每插入一笔订单,对应的库存count减去much
全部代码:
CREATE TRIGGER `t_insert`
BEFORE
INSERT
ON `t_order`
FOR EACH ROW
begin
update t_product set count = count-new.much where id = new.pid;
end;如上 就实现了需求1 ,核心代码中有一个new对象
,new代表了新添加的t_order数据行,sql就不解释了
需求2:
修改订单实现对应的库存加或者减 ,并且限制不能爆仓
代码:
CREATE TRIGGER `t_update`
BEFORE
UPDATE
ON `t_order`
FOR EACH ROW begin
declare
pcount int;
select count into pcount from t_product where id = new.pid;
if new.much>pcount then
set new.much=pcount ;
end if;
update t_product set count=count+old.much-new.much where id=new.id;
end;
以上代码只是简单演示了在update一行数据时修改对应的库存,具体效果有待商榷