Erreur MySql : la table d'une fonction/déclencheur stocké ne peut pas être mise à jour car elle est déjà utilisée par une instruction qui appelle cette fonction/déclencheur stocké
P粉668804228
P粉668804228 2023-10-15 23:34:43
0
2
557

J'exécute une requête MySQL. Cependant, lors de l'ajout d'une nouvelle ligne à partir de la saisie du formulaire, j'obtiens cette erreur :

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

D'après le code :

CREATE TRIGGER `capital` AFTER INSERT ON `brandnames` FOR EACH ROW UPDATE brandnames SET bname = CONCAT( UCASE( LEFT( bname, 1 ) ) , LCASE( SUBSTRING( bname, 2 ) ) )

Que signifie cette erreur ?

P粉668804228
P粉668804228

répondre à tous (2)
P粉573809727

La syntaxe correcte est :

FOR EACH ROW SET NEW.bname = CONCAT( UCASE( LEFT( NEW.bname, 1 ) ) , LCASE( SUBSTRING( NEW.bname, 2 ) ) )
    P粉921165181

    QuandINSERT触发器触发时,您无法更改表。INSERTcertaines opérations de verrouillage peuvent être effectuées, ce qui peut entraîner un blocage. De plus, la mise à jour de la table à partir d'un déclencheur entraînera le déclenchement à nouveau du même déclencheur dans une boucle récursive infinie. Ces deux raisons expliquent pourquoiMySQLvous empêche de faire cela.

    Cependant, en fonction de ce que vous souhaitez réaliser, vous pouvez utiliserNEW.fieldname访问新值,甚至可以使用旧值- 如果执行UPDATE--OLD.

    Si vous avez un champ nomméfull_brand_name的行,并且您想在small_nameutilisant les deux premières lettres comme nom court, vous pouvez utiliser :

    CREATE TRIGGER `capital` BEFORE INSERT ON `brandnames` FOR EACH ROW BEGIN SET NEW.short_name = CONCAT(UCASE(LEFT(NEW.full_name,1)) , LCASE(SUBSTRING(NEW.full_name,2))) END
      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!