一、概述
Mysql 允許通過觸發器、存儲過程、函數的形式來存儲代碼。
觸發器可以讓你在執行 Insert、Update、Delete的時候,執行一些特定的操作。可以在Mysql中指定是在Sql語句執行之前觸發還是執行后觸發。
二、使用觸發器需要注意的點
對每一個表的每一個事件,最多只能定義一個觸發器(換句話說,不能在AFTER INSERT上定義兩個觸發器)。
Mysql只支持“基于行的觸發”,也就是說,觸發器始終是針對一條記錄的,而不是針對整個SQL語句的。所以,如果變更的數據集非常大,效率將會很低。
?三、使用
1、基本說明
create trigger 【觸發器名稱】【觸發器的執行時間點】【執行的動作點】 on 【表名】for each row [函數 或者動作]
說明:
觸發器執行時間:before、after
執行的動作點:insert, update, delete
函數:包在 begin、end 之間
動作:update、insert
2、使用
?
create triggerupdate_product_after
after update onproduct
for each row
beginupdate product set last_update_time = TIMESTAMP-- 代碼區域
end;
四、說明
由于目前大多數的 PHP 框架已經內置了事件觸發的函數,所以我們項目中已經很少再用到 Mysql 本身的觸發器了。并且我們也完全可以在應用程序代碼中去控制,沒必要在Mysql中去寫事件代碼了。
觸發器可以掩蓋服務器背后的工作,一個簡單的Sql語句背后,因為觸發器,可能包含了很多看不見的工作。因此觸發器的問題也很難排查,如果某個性能問題和觸發器相關,將會很難定位和分析。
觸發器可能導致死鎖和鎖等待。如果觸發器失敗,那么原來的sql語句也會失敗。如果沒有意識到這其中是觸發器在搞鬼,那么將很難理解服務器拋出的出錯誤代碼是什么意思。
原文鏈接:https://www.haveyb.com/article/60