Maison > Article > base de données > Pourquoi mon déclencheur MySQL ne parvient-il pas à mettre à jour la colonne PTS après la réussite de l'exécution manuelle ?
Dépannage d'un déclencheur MySQL non fonctionnel pour la mise à jour du PTS sur les statistiques de jeu
Considérez ce problème : malgré la réussite de l'exécution manuelle de la requête, un déclencheur destiné à mettre à jour automatiquement la colonne PTS en fonction des valeurs modifiées des jeux joués ne fonctionne pas. La syntaxe du déclencheur est simple :
<code class="sql">CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table` FOR EACH ROW BEGIN IF (NEW.played_games <> OLD.played_games) THEN update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1)); END IF; END</code>
Cependant, une enquête plus approfondie révèle une erreur lors de la tentative de modification manuelle des jeux joués : "Impossible de mettre à jour la table pos_table dans la fonction/le déclencheur stocké car elle est déjà utilisée par l'instruction qui a invoqué cela fonction/déclencheur stocké."
Explication :
Cette erreur provient des contraintes imposées par les fonctions et déclencheurs stockés. Il leur est interdit de modifier les tables que l'instruction invocatrice a déjà lues ou écrites.
Solution :
Pour les déclencheurs déclenchés lors des opérations d'insertion, si vous avez l'intention de modifier les valeurs étant insérées, utilisez un déclencheur BEFORE INSERT et ajustez les NOUVELLES valeurs.
De plus, l'instruction de mise à jour écrite dans le déclencheur :
<code class="sql">update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));</code>
est erronée. Il met à jour le tableau entier plutôt qu'une seule ligne. Pour ce scénario, il est plus efficace de calculer le PTS au moment de l'affichage plutôt que d'avoir une colonne dédiée. Cela élimine le besoin d'un déclencheur et résout le problème lié au déclencheur.
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!