MySQL Fire Trigger pour l’insertion et la mise à jour

Est-il possible de déclencher un sortinggger mysql à la fois pour les événements d’insertion et de mise à jour d’une table?

Je sais que je peux faire ce qui suit

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

Mais comment puis-je faire

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

Est-ce possible ou dois-je utiliser 2 déclencheurs? Le code est le même pour les deux et je ne veux pas le répéter.

Vous devez créer deux déclencheurs, mais vous pouvez déplacer le code commun dans une procédure et les appeler tous les deux.

En réponse à la requête @Zxaos, puisque nous ne pouvons pas avoir d’opérateurs AND / OR pour les déclencheurs MySQL, en commençant par votre code, vous trouverez ci-dessous un exemple complet pour obtenir la même chose.

1. Définissez le déclencheur INSERT:

 DELIMITER // DROP TRIGGER IF EXISTS my_insert_sortinggger// CREATE DEFINER=root@localhost TRIGGER my_insert_sortinggger 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. Définissez le déclencheur UPDATE

 DELIMITER // DROP TRIGGER IF EXISTS my_update_sortinggger// CREATE DEFINER=root@localhost TRIGGER my_update_sortinggger 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. Définissez la procédure commune utilisée par ces deux déclencheurs:

 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 ; 

Vous notez que je prends soin de restaurer le délimiteur lorsque j’en aurai terminé avec la définition des déclencheurs et de la procédure.

malheureusement, nous ne pouvons pas utiliser MySQL après la description INSERT ou UPDATE , comme dans Oracle