Est-il possible de déclencher un déclencheur mysql 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_trigger
AFTER INSERT ON `table`
FOR EACH ROW
BEGIN
.....
END //
CREATE TRIGGER my_trigger
AFTER UPDATE ON `table`
FOR EACH ROW
BEGIN
.....
END //
Mais comment puis-je faire
CREATE TRIGGER my_trigger
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 faire appeler tous les deux par la procédure.
En réponse à la requête @Zxaos, étant donné que nous ne pouvons pas avoir d'opérateurs AND/OR pour les déclencheurs MySQL, à partir de votre code, voici un exemple complet pour obtenir le même résultat.
1. Définir le déclencheur 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. Définir le déclencheur 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 ;
. Définissez la PROCEDURE 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 mon entreprise a fini de définir les déclencheurs et la procédure.
malheureusement, nous ne pouvons pas utiliser MySQL après INSERT ou UPDATE description, comme dans Oracle