Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur MySql :impossible de mettre à jour la table dans la fonction/le déclencheur stocké car elle est déjà utilisée par l'instruction qui a appelé cette fonction/le déclencheur stocké

Vous ne pouvez pas modifier une table pendant que le déclencheur INSERT est activé. L'INSERT peut effectuer un certain verrouillage, ce qui peut entraîner un blocage. De plus, la mise à jour de la table à partir d'un déclencheur entraînerait alors le déclenchement du même déclencheur dans une boucle récursive infinie. Ces deux raisons expliquent pourquoi MySQL vous empêche de le faire.

Cependant, selon ce que vous essayez d'accomplir, vous pouvez accéder aux nouvelles valeurs en utilisant NEW.fieldname ou même les anciennes valeurs--si vous faites une UPDATE--avec OLD.

Si vous aviez une ligne nommée full_brand_name et vous vouliez utiliser les deux premières lettres comme nom abrégé dans le champ small_name 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