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