"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo actualizar la misma tabla dentro de un disparador de MySQL?

¿Cómo puedo actualizar la misma tabla dentro de un disparador de MySQL?

Publicado el 2024-11-18
Navegar:873

How can I update the same table within a MySQL trigger?

Solución alternativa del activador de MySQL para actualizar la misma tabla

MySQL restringe inherentemente que los activadores actualicen filas en la misma tabla a la que están asignados, lo que evita llamadas recursivas . A pesar de esta limitación, existe una solución alternativa viable.

Solución alternativa sugerida

En lugar de actualizar directamente las filas dentro de un activador, aproveche un procedimiento almacenado que ejecute la lógica deseada. Este método separa la tarea de actualización de filas del activador y le permite eludir la restricción.

Ejemplo

Considere el siguiente escenario:

CREATE TABLE MyTable (
  id INT PRIMARY KEY,
  attribute VARCHAR(255)
);

-- Trigger to insert a row into MyTable for each new parent product record
CREATE TRIGGER my_trigger AFTER INSERT ON Products
FOR EACH ROW
BEGIN
  -- Issue SQL statement to call a stored procedure that performs the insert
  CALL insert_attribute(NEW.id, 'Value');
END;

En el ejemplo anterior, el activador my_trigger llama al procedimiento almacenado insert_attribute para insertar una fila en MyTable cuando se inserta un nuevo registro en la tabla Productos, imitando efectivamente la funcionalidad de una actualización directa de fila dentro del disparador.

Consideraciones adicionales

Si bien esta solución alternativa sirve como una solución funcional, es importante tener en cuenta que Se diferencia de un disparador tradicional en términos de rendimiento y mantenibilidad. Los procedimientos almacenados pueden introducir una sobrecarga y complejidad adicionales al sistema de base de datos en comparación con las actualizaciones de activación directa.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3