Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour en toute sécurité une table dans un déclencheur après une mise à jour sur la même table dans SQL ?

Comment puis-je mettre à jour en toute sécurité une table dans un déclencheur après une mise à jour sur la même table dans SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 16:15:141021parcourir

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

Mise à jour d'une table dans un trigger après mise à jour sur la même table

En SQL, mise à jour d'une table dans un trigger après une mise à jour sur la même table le même tableau présente un problème potentiel. En effet, la table est déjà verrouillée pour l'opération de mise à jour et tenter d'accéder à la table dans un déclencheur exécuté dans le cadre de la même transaction peut entraîner un conflit.

Pour contourner cette restriction, vous pouvez mettre à jour le colonnes affectées dans le déclencheur en utilisant l’option AVANT au lieu d’APRÈS. Cela vous permet de mettre à jour les colonnes de la table avant l'opération de mise à jour d'origine, garantissant ainsi que les modifications nécessaires sont apportées à la table avant la finalisation de la transaction.

Considérez l'exemple suivant :

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
;

Dans cet exemple, le déclencheur s'exécutera avant chaque opération de mise à jour sur la table products_score. Il calculera la nouvelle valeur de la colonne votes_total en fonction des valeurs des colonnes mises à jour (votes_1 à votes_5) et la stockera dans la colonne virtuelle new.votes_total fournie par le contexte du déclencheur.

Lorsque vous mettez à jour la table , le déclencheur garantira que la colonne votes_total est mise à jour en conséquence, même si l'instruction update ne met pas explicitement à jour la colonne votes_total elle-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn