觸發器
1. mysql觸發器 情景說明
情景設置,如圖,當我們點擊了購買,將會發生什么?
現有如下兩張表
商品表
編號(id)名稱(name)價格(price)庫存(stock)
1F2戰斗機10000100
2法拉利80070
3航空母艦500020
4三棲交通工具100050
訂單表
編號(id)商品編號(tid)購買數量(num)下單時間(order_time)
我們現在要買5架F2戰斗機,下一個訂單,需要做什么?
傳統的做法:
insert into ord(tid,num) values(1,5);
update traffic set stock = stock - 5 where id = 1;
新的方式:
我們可以使用觸發器,一觸即發!!
2.mysql觸發器使用:trigger
2.1 觸發器四要素:
地點:(表,table),
監視的事件:(insert,delete,update)
時間:(before/after)
觸發的事件:(insert,delete,update)
2.2創建觸發器的語法:
注意:在寫觸發器之前,要更改的mysql的分隔符。
監視事件和觸發事件之間如何傳遞值?
需求:現在我們要購買 10輛法拉利, 商品表里的觸發器應該 這樣寫:
#商品表的觸發器
delimiter $
create triggter tg1
after //事件觸發在 下訂單之后
insert // 監視插入事件
on order // 監視 order訂單表
for each row
begin
update traffic set stock=stock- new,num where id= new id;
end $
在order表的操作:
insert into(tid,num) values(2,10);
以下分析均對于 order表而言
對于insert而言,
新舊關系
New表示是新插入的一行,
要引用其中的tid和num,如何引用?
New.tid
new.num
對于delete而言:
對于update而言
需求:先購買了10個輛法拉利,然后要把數量更改為5,寫出觸發器;
#商品表的觸發器
mysql> delimiter $
mysql> create trigger tg3
-> after
-> update
-> on ord
-> for each row
-> begin
-> update traffic set stock = stock + old.num - new.num where id = new.tid;
-> end $
[關于before]
有沒有before的情況。
After:在監視事件發生之后觸發的,觸發事件要晚于監視事件。
Before:在監視事件發生之前觸發的,觸發事件要早于監視事件。
需求:若訂單數量超過10的話,就認為是惡意訂單,只讓其購買10個。
#商品表的觸發器
mysql> delimiter $
mysql> create trigger tg4
-> before
-> insert
-> on ord
-> for each row
-> begin
-> if new.num > 10 then
-> set new.num = 10;
-> end if;
-> update traffic set stock = stock - new.num where id = new.tid;
-> end $
3.觸發器應用場合
1.當向一張表中添加或刪除記錄時,需要在相關表中進行同步操作。
比如,當一個訂單產生時,訂單所購的商品的庫存量相應減少。
2.當表上某列數據的值與其他表中的數據有聯系時。
比如,當某客戶進行欠款消費,可以在生成訂單時通過設計觸發器判斷該客戶的累計欠款是否超出了最大限度。
3.當需要對某張表進行跟蹤時。
比如,當有新訂單產生時,需要及時通知相關人員進行處理,此時可以在訂單表上設計添加觸發器加以實現
bitsCN.com聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com