"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 de forma segura una tabla dentro de un activador después de una actualización en la misma tabla en SQL?

¿Cómo puedo actualizar de forma segura una tabla dentro de un activador después de una actualización en la misma tabla en SQL?

Publicado el 2024-12-22
Navegar:363

How Can I Safely Update a Table Within a Trigger After an Update on the Same Table in SQL?

Actualizar una tabla en un desencadenador después de actualizar en la misma tabla

En SQL, actualizar una tabla en un desencadenador después de una actualización en el La misma tabla presenta un problema potencial. Esto se debe a que la tabla ya está bloqueada para la operación de actualización y intentar acceder a la tabla dentro de un activador ejecutado como parte de la misma transacción puede generar un conflicto.

Para evitar esta restricción, puede actualizar la tabla columnas afectadas en el activador utilizando la opción ANTES en lugar de DESPUÉS. Esto le permite actualizar las columnas de la tabla antes de que ocurra la operación de actualización original, asegurando que se realicen los cambios necesarios en la tabla antes de que finalice la transacción.

Considere el siguiente ejemplo:

CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score
FOR EACH ROW
BEGIN
    SET new.votes_total = new.votes_1   new.votes_2   new.votes_3   new.votes_4   new.votes_5
END
;

En este ejemplo, el activador se ejecutará antes de cada operación de actualización en la tabla product_score. Calculará el nuevo valor para la columna votes_total en función de los valores de las columnas actualizadas (votes_1 a votes_5) y lo almacenará en la columna virtual new.votes_total proporcionada por el contexto de activación.

Cuando actualice la tabla , el activador garantizará que la columna votes_total se actualice en consecuencia, aunque la declaración de actualización no actualice explícitamente la columna votes_total en sí.

Ú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