插入和更新的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中一样