"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-22
Parcourir:264

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

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3