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!