Piège du déclencheur : mettre à jour une table référencée par le déclencheur
La mise à jour de la même table dans un déclencheur peut entraîner des problèmes. Un tel exemple est présenté où une tentative est faite de mettre à jour la table products_score à l'aide d'un déclencheur qui s'exécute après une mise à jour.
Le déclencheur, comme indiqué dans le code fourni, tente de calculer et de mettre à jour la colonne votes_total en fonction de les valeurs des autres colonnes (votes_1, votes_2, ..., votes_5) dans la même table products_score. Cependant, lorsque cette mise à jour est déclenchée, une erreur se produit :
#1442 - Can't update table 'products_score' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Solution : Utiliser un déclencheur AVANT
Pour résoudre ce problème, le déclencheur doit être modifié pour exécuter avant la mise à jour de la ligne, pas après. En s'exécutant avant la mise à jour, le déclencheur peut accéder et modifier les nouvelles valeurs attribuées à la colonne votes_total.
Le déclencheur révisé utilisant une clause BEFORE update est le 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;
Avec Cette modification, le déclencheur calcule et met à jour avec succès la colonne votes_total avant que la mise à jour réelle de la ligne ne se produise, résolvant l'erreur et permettant la fonctionnalité souhaitée.
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!