觸發器是一類特殊的事務,可以監視某種數據操作(增刪改),并觸發相關操作(增刪改),自動調用并且執行一定的功能。
1、創建語法
create trigger t_name t_time t_event on tbl_name for each row t_stmt;
四要素:
(1) 監視地點 tbl_name
(2) 監視事件 t_event
insert/update/delete
(3) 觸發時間 t_time
before:表示在檢查約束前觸發
after:表示在檢查約束后觸發
(4) 觸發事件 t_stmt
多語句的觸發器,用 begin/end; 來表示觸發器操作的開始和結束(需要更改結束符,delimiter //)。
行變量 new 和 old 表示新/舊數據。
for each row 表示是行級觸發的,也就是以行為單位,數據庫也可以支持語句級觸發,MySQL 只支持行級觸發。
2、應用場景
有時在進行數據庫應用開發中,需要在某些表的數據改變時,會引起相關數據的改變,使用觸發器就能滿足這樣的需求。
比如:
在創建訂單時,自動減少庫存/及時通知相關人員去處理爆倉。
當客戶進行透支消費時,可以通過設計觸發器來判斷用戶累計欠款是否超出了最大限額。
3、查看觸發器
show triggers \G;
show create trigger t_name;
select * from information_schema.triggers where trigger_name = 't1';
4、刪除觸發器
drop trigger [db_name.]t_name;
簡單編程:
create trigger t1
before
insert
on order
for each row
begin
declare int rnum;
select num into rnum where gid=new.gid;
if new.much > rnum then
set new.much = rnum;
endif;
update goods set num = num - new.much where gid = new.gid;
end$
總結:
1、觸發器自動完成某些操作、簡化程序、增加程序靈活性。
2、觸發器只能創建在永久表上,不能對臨時表創建觸發器。
3、同一個表相同觸發時間、相同觸發事件的情況下,只能定義一個觸發器。
4、有時候,可以考慮在應用層來實現類似觸發器的功能。