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
Libérer: 2024-12-21 16:15:14
original
948 Les gens l'ont consulté

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
;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal