En respuesta a la solicitud @Zxaos, ya que no podemos tener y/o operadores para MySQL desencadena, a partir de su código, a continuación se muestra un ejemplo completo para lograr lo mismo.
1. Definir el gatillo INSERT:
DELIMITER //
DROP TRIGGER IF EXISTS my_insert_trigger//
CREATE [email protected] 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. definir el disparo ACTUALIZACIÓN
DELIMITER //
DROP TRIGGER IF EXISTS my_update_trigger//
CREATE [email protected] 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. definir el procedimiento común utilizado por estos dos gatillos:
DELIMITER //
DROP PROCEDURE IF EXISTS procedure_to_run_processes_due_to_changes_on_table//
CREATE [email protected] 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.
eso es una buena idea. No había pensado en usar un procedimiento también. –
¿Podría dar un ejemplo de esto para aquellos que no están familiarizados con la sintaxis? – Zxaos
@Zxaos: Sugiero comenzar con http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html (que incluye algunos ejemplos) y hacer sus propias preguntas si es necesario. – derobert