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.
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.
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>
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.
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!