有沒有辦法創建MySQL觸發器觸發在UPDATE或INSERT?在INSERT或UPDATE觸發的MySQL觸發器?
喜歡的東西
CREATE TRIGGER t_apps_affected BEFORE INSERT OR UPDATE ...
顯然,上述不工作。那麼,沒有創建兩個單獨的觸發器的任何解決方法? 我需要這個以更新另一個表上的運行計數器。
有沒有辦法創建MySQL觸發器觸發在UPDATE或INSERT?在INSERT或UPDATE觸發的MySQL觸發器?
喜歡的東西
CREATE TRIGGER t_apps_affected BEFORE INSERT OR UPDATE ...
顯然,上述不工作。那麼,沒有創建兩個單獨的觸發器的任何解決方法? 我需要這個以更新另一個表上的運行計數器。
不幸的是,沒有簡寫形式 - 您必須創建多個觸發器 - 每個事件一個。
的doc說:
trigger_event
表明激活觸發器的語句種類。該trigger_event可以是以下的一個:INSERT:每當一個新的行被插入到 表中的觸發器被激活;例如,通過INSERT,LOAD DATA和REPLACE 聲明。
UPDATE:每當行被修改時觸發器被激活;對於 的例子,通過UPDATE語句。
DELETE:只要從 表中刪除一行,觸發器即被激活;例如,通過DELETE和REPLACE語句。但是, 表中的DROP TABLE和TRUNCATE TABLE語句不激活 此觸發器,因爲它們不使用DELETE。刪除分區 也不會激活DELETE觸發器。參見12.1.27節, 「TRUNCATE TABLE語法」。
儘管無法放置trigger on multiple events,但您可以將兩個觸發器定義爲僅調用另一個存儲過程,從而減少需要提交的代碼量。只需創建單獨的觸發器,不要做任何事情,但是,例如,
CALL update_counter();
並將您的所有實際工作都放入過程中。觸發器將是一個簡單的
CREATE TRIGGER t_apps_affected BEFORE INSERT ON table
FOR EACH ROW
BEGIN
CALL update_counter();
END;