插入和更新的MySQL火警触发器

是否有可能触发一个表的插入和更新事件的MySQL触发器?

我知道我可以做到以下几点

CREATE TRIGGER my_trigger AFTER INSERT ON `table` FOR EACH ROW BEGIN ..... END // CREATE TRIGGER my_trigger AFTER UPDATE ON `table` FOR EACH ROW BEGIN ..... END // 

但我该怎么办

 CREATE TRIGGER my_trigger AFTER INSERT ON `table` AND AFTER UPDATE ON `table` FOR EACH ROW BEGIN ..... 

这是可能的,还是我必须使用2触发器? 这两个代码是相同的,我不想重复。

您必须创build两个触发器,但是可以将通用代码移动到一个过程中,让他们都调用过程。

为了响应@Zxaos请求,因为我们不能有MySQL触发器的AND / OR运算符,所以从你的代码开始,下面是一个完整的例子。

1.定义INSERT触发器:

 DELIMITER // DROP TRIGGER IF EXISTS my_insert_trigger// CREATE DEFINER=root@localhost TRIGGER my_insert_trigger AFTER INSERT ON `table` FOR EACH ROW BEGIN -- Call the common procedure ran if there is an INSERT or UPDATE on `table` -- NEW.id is an example parameter passed to the procedure but is not required -- if you do not need to pass anything to your procedure. CALL procedure_to_run_processes_due_to_changes_on_table(NEW.id); END// DELIMITER ; 

2.定义UPDATE触发器

 DELIMITER // DROP TRIGGER IF EXISTS my_update_trigger// CREATE DEFINER=root@localhost TRIGGER my_update_trigger AFTER UPDATE ON `table` FOR EACH ROW BEGIN -- Call the common procedure ran if there is an INSERT or UPDATE on `table` CALL procedure_to_run_processes_due_to_changes_on_table(NEW.id); END// DELIMITER ; 

3.定义这两个触发器使用的通用PROCEDURE:

 DELIMITER // DROP PROCEDURE IF EXISTS procedure_to_run_processes_due_to_changes_on_table// CREATE DEFINER=root@localhost PROCEDURE procedure_to_run_processes_due_to_changes_on_table(IN table_row_id VARCHAR(255)) READS SQL DATA BEGIN -- Write your MySQL code to perform when a `table` row is inserted or updated here END// DELIMITER ; 

您注意到,当我完成定义触发器和过程的业务时,我注意恢复分隔符。

不幸的是,我们不能在INSERT或UPDATE描述之后在MySQL中使用,就像在Oracle中一样