一、觸發器是由事件來觸發某個操做,這些事件包括insert語句、update語句和delete語句。當數據庫系統執行這些事件時,會激活觸發器執行相應操做。MySQL從5.0.2開始支持觸發器。使用觸發器能夠保證某些操做之間的一致性。數據庫
二、建立一個執行語句的觸發器orm
create trigger 觸發器名 before|after 觸發事件 on 表名 for each row 執行語句;事件
before和after參數指定觸發器執行的時間;get
觸發事件包括insert、update和delete;it
for each row表示任何一條記錄上的操做知足觸發條件都會觸發觸發器;io
執行語句指觸發器被觸發後執行的程序form
create trigger dept_trig1 before insert on department for each row insert into trigger_time values(now());class
三、建立多個執行語句的觸發器test
create trigger 觸發器名 before|after 觸發事件 on 表名 for each row begin 執行語句列表 end;date
通常狀況下,MySQL默認以';'結束執行語句。在建立觸發器過程當中須要用到該符號。在執行語句列表也用';'分隔執行語句,所以能夠用delimiter語句。
delimiter &&
create trigger dept_trig2 after delete
on department for each row
begin
insert into trigger_time values('21:01:01');
insert into trigger_time values('22:01:01');
end
&&
delimiter;
MySQL中,一個表在相同觸發時間的相同觸發事件只能建立一個觸發器。如觸發事件insert,觸發時間爲after的觸發器只有一個。
四、查看觸發器
指查看數據庫中已存在的觸發器的定義、狀態和語法等信息。查看方法包括show triggers語句和查詢information_schema數據庫下的triggers表等。
show triggers \G //查看全部的觸發器,不適合觸發器不少的狀況
select * from information_schema.triggers;
select * from information_schema.triggers where trigger_name='觸發器名';
五、MySQL中,觸發器執行的順序是before觸發器、表操做(insert、update和delete)和after觸發器
create trigger before_insert before insert on department for each row insert into trigger_test values(null, "before_insert");
create trigger after_insert before insert on department for each row insert into trigger_test values(null, "after_insert");
激活觸發器時,對觸發器的執行語句存在一些限制。如,觸發器中不能包含start transaction、commit或rollback等關鍵詞也不能包含call語句。
在觸發器執行過程當中,任何步驟出錯都會阻止程序向下執行,對於普通表來講,已經更新過的記錄不能回滾,更新後的數據將繼續保留在表中。
六、刪除觸發器
drop trigger 觸發器名。
觸發器名參數若是指指定名稱會在當前數據庫下查找該觸發器,若是找到就刪除。若是指定數據庫,數據庫系統會到指定的數據庫下去查找觸發器。
若是再也不須要某觸發器,必定要將該觸發器刪除。