在INSERT或UPDATE上触发的MySQL触发器?

时间:2011-07-28 06:54:28

标签: mysql sql triggers

有没有办法创建在UPDATE或INSERT上触发的MySQL触发器?

这样的东西
CREATE TRIGGER t_apps_affected BEFORE INSERT OR UPDATE ...
显然,以上都行不通。那么,没有创建两个单独的触发器的任何变通方法? 我需要这个来更新另一个表上的运行计数器。

2 个答案:

答案 0 :(得分: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语法”。

答案 1 :(得分: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;