sql >> Database teknologi >  >> RDS >> Mysql

MySql-fejl:Kan ikke opdatere tabel i lagret funktion/trigger, fordi den allerede bruges af sætning, der påkaldte denne lagrede funktion/trigger

Du kan ikke ændre en tabel, mens INSERT-triggeren udløses. INSERT'en kan muligvis låse noget, hvilket kan resultere i dødlås. Desuden vil opdatering af tabellen fra en trigger få den samme trigger til at udløse igen i en uendelig rekursiv løkke. Begge disse grunde er, hvorfor MySQL forhindrer dig i at gøre dette.

Men afhængigt af hvad du forsøger at opnå, kan du få adgang til de nye værdier ved at bruge NEW.fieldname eller endda de gamle værdier--hvis du laver en OPDATERING--med OLD.

Hvis du havde en række ved navn full_brand_name og du ønskede at bruge de første to bogstaver som et kort navn i feltet small_name du kan bruge:

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


  1. Leverer hurtigere innovation til MariaDBs fællesskab

  2. Validering af dine PostgreSQL-sikkerhedskopier på Docker

  3. Undgå SQL-deadlocks med forespørgselsjustering:Råd fra Brent Ozar

  4. SQL Server Transaction Log — Del 2