Maison >base de données >tutoriel mysql >Pourquoi ne puis-je pas mettre à jour une table dans une fonction ou un déclencheur stocké MySQL ?

Pourquoi ne puis-je pas mettre à jour une table dans une fonction ou un déclencheur stocké MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 11:30:13800parcourir

Why Can't I Update a Table Inside a MySQL Stored Function or Trigger?

Erreur MySQL : mises à jour interdites dans les fonctions/déclencheurs stockés

Lorsque vous essayez de mettre à jour une table dans une fonction ou un déclencheur stocké MySQL, vous pouvez rencontrez l'erreur :

Error: Can't update table 'brandnames' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Comprendre le Erreur

Cette erreur provient de la restriction de MySQL qui interdit de modifier une table pendant l'exécution d'un déclencheur INSERT. De telles modifications pourraient potentiellement conduire à des blocages ou à des boucles récursives infinies.

Éviter l'erreur

Pour éviter cette erreur, envisagez les approches suivantes :

  • Utilisez le NOUVEAU et l'ANCIEN Champs :

    • Accédez aux nouvelles valeurs dans le déclencheur à l'aide de la syntaxe NEW.fieldname.
    • Accédez aux anciennes valeurs dans le déclencheur à l'aide de la syntaxe OLD.fieldname (si vous effectuez une MISE À JOUR).
  • Modifier le déclencheur Contexte :

    • Modifiez le type de déclencheur de APRÈS INSERT à AVANT INSERT.
    • Déplacez le code de modification de la table en dehors de la fonction ou du déclencheur stocké.

Exemple d'utilisation AVANT INSÉRER Déclencheur :

Supposons que vous ayez un champ full_brand_name et que vous deviez créer un champ short_name contenant les deux premières lettres en majuscules :

CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames`
FOR EACH ROW BEGIN
  SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_brand_name,1)) , LCASE(SUBSTRING(NEW.full_brand_name,2)))
END

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!

Déclaration:
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