2011-07-28 65 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;