w3schools update trigger sirve que para ejemplos before mysql triggers

update - triggers mysql workbench



Disparador de fuego MySQL para inserciĆ³n y actualizaciĆ³n (3)

Debe crear dos desencadenadores, pero puede mover el código común a un procedimiento y hacer que ambos invoquen el procedimiento.

¿Es posible disparar un disparador mysql para los eventos de inserción y actualización de una tabla?

Sé que puedo hacer lo siguiente

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 //

Pero como puedo hacer

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

¿Es posible, o tengo que usar 2 disparadores? El código es el mismo para ambos y no quiero repetirlo.


En respuesta a la solicitud de @Zxaos, dado que no podemos tener operadores Y / O para desencadenantes MySQL, comenzando con su código, a continuación se muestra un ejemplo completo para lograr lo mismo.

1. Defina el disparador INSERTAR:

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. Defina el activador ACTUALIZAR

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. Defina el PROCEDIMIENTO común utilizado por ambos desencadenantes:

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 ;

Tenga en cuenta que me ocupo de restaurar el delimitador cuando haya terminado con mi empresa que define los desencadenantes y el procedimiento.


desafortunadamente no podemos usar en MySQL después de la descripción INSERT o UPDATE , como en Oracle