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
Libérer: 2024-12-07 11:30:13
original
789 Les gens l'ont consulté

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

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

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