2011-07-28 90 views
0

有沒有辦法創建MySQL觸發器觸發在UPDATE或INSERT?在INSERT或UPDATE觸發的MySQL觸發器?

喜歡的東西

CREATE TRIGGER t_apps_affected BEFORE INSERT OR UPDATE ...

顯然,上述不工作。那麼,沒有創建兩個單獨的觸發器的任何解決方法? 我需要這個以更新另一個表上的運行計數器。

回答

3

不幸的是,沒有簡寫形式 - 您必須創建多個觸發器 - 每個事件一個。

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語法」。

3

儘管無法放置trigger on multiple events,但您可以將兩個觸發器定義爲僅調用另一個存儲過程,從而減少需要提交的代碼量。只需創建單獨的觸發器,不要做任何事情,但是,例如,

CALL update_counter(); 

並將您的所有實際工作都放入過程中。觸發器將是一個簡單的

CREATE TRIGGER t_apps_affected BEFORE INSERT ON table 
    FOR EACH ROW 
BEGIN 
CALL update_counter(); 
END;