有没有办法创建在UPDATE或INSERT上触发的MySQL触发器?
像
这样的东西CREATE TRIGGER t_apps_affected BEFORE INSERT OR UPDATE ...
显然,以上都行不通。那么,没有创建两个单独的触发器的任何变通方法?
我需要这个来更新另一个表上的运行计数器。
答案 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;