Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi mon déclencheur MySQL ne parvient-il pas à mettre à jour la colonne PTS après la réussite de l'exécution manuelle ?

Mary-Kate Olsen
Libérer: 2024-11-06 07:05:02
original
744 Les gens l'ont consulté

Why Is My MySQL Trigger Failing to Update the PTS Column After Manual Execution Succeeds?

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!