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
661

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

Quand INSERT 触发器触发时,您无法更改表。 INSERT certaines 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 pourquoi MySQL vous empêche de faire cela.

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

Si vous avez un champ nommé full_brand_name 的行,并且您想在 small_name utilisant 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