Maison > base de données > tutoriel mysql > Pourquoi mon déclencheur MySQL ne fonctionne-t-il pas : s'agit-il d'une erreur de syntaxe ou d'une restriction de fonction/déclencheur stockée ?

Pourquoi mon déclencheur MySQL ne fonctionne-t-il pas : s'agit-il d'une erreur de syntaxe ou d'une restriction de fonction/déclencheur stockée ?

Barbara Streisand
Libérer: 2024-11-06 15:18:03
original
844 Les gens l'ont consulté

Why is my MySQL Trigger not working: Is it a Syntax Error or a Stored Function/Trigger Restriction?

Débogage d'un déclencheur MySQL inefficace : comprendre les restrictions relatives aux fonctions/déclencheurs stockés

Rencontrer un déclencheur MySQL qui ne répond pas peut être frustrant, en particulier lorsque la requête fonctionne parfaitement lorsqu'elle est exécutée manuellement. Dans de tels scénarios, le problème réside souvent dans la syntaxe du déclencheur ou dans les limitations imposées par les fonctions et les déclencheurs stockés.

Erreur de syntaxe du déclencheur

La syntaxe du déclencheur fournie semble simple et suit le modèle attendu. Cependant, il est important de revérifier l'emplacement des parenthèses et des points-virgules, en s'assurant qu'ils sont correctement placés et qu'ils ne provoquent aucune erreur syntaxique.

Restrictions des fonctions/déclencheurs stockées

L'une des principales restrictions pour être conscient lors de l'utilisation de fonctions et de déclencheurs stockés est leur incapacité à modifier les tables actuellement utilisées par l'instruction appelant. Cette restriction est clairement décrite dans la documentation :

<code class="text">"A stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger."</code>
Copier après la connexion

Dans le déclencheur fourni, l'instruction update pos_table set PTS=((NEW.won_games*2) (NEW.tie_games*1)); tente de mettre à jour la même table (pos_table) qui est modifiée par le déclencheur (car elle se déclenche lors de UPDATE sur pos_table). Cette violation de la restriction susmentionnée entraîne l'erreur rencontrée lors de la modification manuelle de la colonne Playing_games.

Approche alternative

Pour contourner la limitation imposée par les restrictions de fonctions/déclencheurs stockées, il est recommandé d'envisager d'utiliser un type de déclencheur différent, tel que BEFORE INSERT, si vous avez l'intention de modifier les valeurs lors de l'insertion. Cependant, dans ce cas particulier, le calcul du PTS peut être effectué directement lors de l'affichage des valeurs, éliminant ainsi le besoin d'un déclencheur ou d'une fonction stockée. Cette approche simplifie le code et évite les conflits potentiels avec les restrictions de fonctions/déclencheurs stockées.

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