最近看了燕十八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一行數據時修改對應的庫存,具體效果有待商榷