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