三、触发器
三、觸發器:觸發trigger?(槍擊、扳機、引線)
??????作用:監視某種情況并觸發某種操作,可以監視增刪改,觸發增刪改
??????
??????監視對象:表
??????監視操作:insert
??????觸發操作:update
??????觸發時間:after???
??????創建觸發器語法:
create?trigger?觸發器名稱?after/before?insert/update/delete?on?表名?for?each?row?begin???sql語句????end;?
?????????????????????
改變mysql結束符:delimiter?結束符,可以是#、$等,默認是;分號
>delimiter?$
>create?trigger?tg1?after?insert?on?o?for?each?row?begin?update?g?set?num=num-3?where?id=2;?end$
如何在觸發器中引用行的值,對于新增的行用new表示,行中每一列的值用?new.列名?表示
1、添加訂單,庫存減少
>create?trigger?tg2?after?insert?on?o?for?each?row?begin?update?g?set?num=num-new.muth??where?id=new.gid;?end$
刪除觸發器語法:drop?trigger?觸發器名
實例:2、刪除一個訂單時,庫存相應增加?
?????????刪除之前的數據用old引用,數據列用old.列名
?????????>create?trigger?tg3?after?delete?on?o?for?each?row?begin?update?g?set?num=num+old.much??where?id=old.gid;?end$
?????????>?delete?from?o?where?oid=2$
?????????此時訂單被刪除,庫存相應增加?
??????3、修改一個訂單購買數量時,庫存相應改變
?????????對于update,修改前的數據用old表示old.列名?引用修改前的數據,
?????????修改后的數據用new表示,new.列名??
?????????>create?trigger?tg4?after?update?on?o?for?each?row?begin?update?g?set?num=num+old.much-new.much??where?id=old.gid;?end$
觸發器after和before區別:
??????after是先完成數據的增刪改,再觸發,觸發監視中的語句晚于增刪改,無法影響前面的增刪改
??????Before是先完成觸發在增刪改,觸發的語句先與觸發增刪改,我們有機會判斷修改即將發生的增刪改操作
案例:對于所下訂單進行判斷,如果訂單數量大于5,就認為是惡意訂單,強制吧所下訂單商品改為5
?????對同一表進行的同一觸發器不能重復,比如不能有兩個insert、兩個update、或兩個delete,否則會出現執行兩次觸發器,可以刪除一個觸發器,“drop?trigger?觸發器名”,
create?trigger?tg5
before?insert?on?o
for?each?row
begin
if?new.much?>?5?then
? set?new.much?=?5;
???????end?if;
???????update?g?set?num?=?num?-?new.much?where?id=new.gid;
end$
創建觸發器:creater?trigger;
刪除觸發器:delete?trigger;
如何查看觸發器:show?triggers;
總結
- 上一篇: 三、连接查询
- 下一篇: IE中页面不居中,火狐谷歌等正常