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