目錄
1 觸發器的定義
觸發器(trigger)是和表關聯的特殊的存儲過程,當數據庫系統執行insert、update和delete事件時,會激活使其執行相應的操作。
2 創建和執行觸發器
2.1 觸發器中的 new和 old
在MySQL中用old
和new
表示觸發器執行前和執行後的數據。
new在before觸發器中賦值、取值,在after觸發器中取值。在after的觸發器中,new的賦值已經結束了,只能讀取內容。
深入瞭解:https://www.cnblogs.com/joyco773/p/5787088.html
2.2 創建觸發器
-- 單個執行語句的觸發器
CREATE trigger 觸發器名 before/after 觸發事件
ON 表名 FOR EACH ROW 執行語句
-- 多個執行語句的觸發器
CREATE trigger 觸發器名 before/after 觸發事件
ON 表名 FOR EACH ROW
BEGIN
執行語句
END
MySQL是按照BEFORE觸發器、行操作、AFTER觸發器的順序執行的
2.3 執行觸發器
例如:test表插入時將新數據trig列設爲insert_trigger
create trigger insert_trigger before insert
on test for each row
set new.trigger='insert_trigger';
navicat觸發器
插入數據
結果
3 刪除觸發器
DROP trigger [IF EXISTS] [schema_name.]trigger_name
schema_name是數據庫的名稱,trigger_name是要刪除的觸發器的名稱。
4 查看觸發器
在MySQL中,所有的觸發器的定義都存在於INFORMATION_SCHEMA數據庫的triggers表中,可以通過查詢命令SELECT來查看,具體語法如下:
SHOW trigger [FROM schema_name];
5 觸發器的優點與缺點
優點:
-
安全性
可以基於數據庫的值使用戶具有操作數據庫的某種權利。可以基於時間限制用戶的操作,例如不允許下班後和節假日修改數據庫數據;可以基於數據庫中的數據限制用戶的操作,例如不允許股票的價格的升幅一次超過10%。 -
審計
可以跟蹤用戶對數據庫的操作。 審計用戶操作數據庫的語句;把用戶對數據庫的更新寫入審計表。 -
實現複雜的數據完整性規則
實現非標準的數據完整性檢查和約束。觸發器可產生比規則更爲複雜的限制。與規則不同,觸發器可以引用列或數據庫對象。例如,觸發器可回退任何企圖喫進超過自己保證金的期貨。提供可變的缺省值。 -
實現複雜的非標準的數據庫相關完整性規則。
觸發器可以對數據庫中相關的表進行連環更新。
在修改或刪除時級聯修改或刪除其它表中的與之匹配的行。
在修改或刪除時把其它表中的與之匹配的行設成NULL值。
在修改或刪除時把其它表中的與之匹配的行級聯設成缺省值。
觸發器能夠拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務。 -
同步實時地複製表中的數據。
-
SQL觸發器提供了運行計劃任務的另一種方法。自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。例如,如果公司的帳號上的資金低於5萬元則立即給財務人員發送警告數據。
缺點:
增加程序的複雜度,有些業務邏輯在代碼中處理,有些業務邏輯用觸發器處理,會使後期維護變得困難;
參考:
https://blog.51cto.com/9291927/2095105 (觸發器應用)
https://www.cnblogs.com/joyco773/p/5787088.html (對數據庫觸發器new和old的理解)