觸發(fā)器是一類特殊的事務 ,可以監(jiān)視某種數(shù)據(jù)操作(insert/update/delete),并觸發(fā)相關操作(insert/update/delete)。
看以下事件:
完成下單與減少庫存的邏輯
Insert into o (gid,num) values (2,3); // 插入語句
Update g set goods_num = goods_num - 3 where id = 2;// 更新過程
這兩個邏輯可以看成一個整體,或者說, insert ---> 引來 update
用觸發(fā)器可以解決上述問題.
我們可以監(jiān)視某表的變化,當發(fā)生某種變化時,觸發(fā)某個操作.
創(chuàng)建觸發(fā)器的語法
Create trigger triggerName
After/before insert/update/delete on 表名
For each row #這句話是固定的
Begin
Sql語句; # 一句或多句,insert/update/delete范圍內
End;
刪除觸發(fā)器的語法:
Drop trigger 觸發(fā)器名
查看觸發(fā)器
Show triggers
如何在觸發(fā)器引用行的值
對于insert而言, 新增的行 用new 來表示,
行中的每一列的值 ,用new.列名來表示.
對于 delete來說, 原本有一行,后來被刪除,
想引用被刪除的這一行,用old,來表示, old.列名,就可以引用被刪行中的值.
對于update來說,
被修改的行,
修改前的數(shù)據(jù) ,用 old來表示, old.列名引用被修改之前行中的值
修改后的數(shù)據(jù),用new 來表示, new.列名引用被修改之后行中的值
觸發(fā)器里after 和before的區(qū)別
After 是先完成數(shù)據(jù)的增,刪,改再觸發(fā),
觸發(fā)的語句晚于監(jiān)視的增,刪,改,無法影響前面的增刪改動作.
Before是先完成觸發(fā),再增刪改,
觸發(fā)的語句先于監(jiān)視的增,刪,改發(fā)生,我們有機會判斷,修改即將發(fā)生的操作.
典型案例:
對于所下訂單,進行判斷,如果訂單的數(shù)量 > 5 ,就認為是惡意訂單,
強制把所訂的商品數(shù)量改成5
查看哪些觸發(fā)器:
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22722.html
閱讀 3870·2021-09-10 11:22
閱讀 2325·2021-09-03 10:30
閱讀 3660·2019-08-30 15:55
閱讀 1873·2019-08-30 15:44
閱讀 841·2019-08-30 15:44
閱讀 582·2019-08-30 14:04
閱讀 3042·2019-08-29 17:18
閱讀 1262·2019-08-29 15:04