sql >> Databasteknik >  >> RDS >> Mysql

MySql-fel:Kan inte uppdatera tabellen i lagrad funktion/trigger eftersom den redan används av en sats som anropade denna lagrade funktion/trigger

Du kan inte ändra en tabell medan INSERT-utlösaren utlöses. INSERT kan göra en viss låsning som kan resultera i ett dödläge. Dessutom skulle en uppdatering av tabellen från en trigger göra att samma trigger aktiveras igen i en oändlig rekursiv loop. Båda dessa skäl är varför MySQL hindrar dig från att göra detta.

Men beroende på vad du försöker uppnå kan du komma åt de nya värdena genom att använda NEW.fieldname eller till och med de gamla värdena--om du gör en UPPDATERING--med OLD.

Om du hade en rad med namnet full_brand_name och du ville använda de två första bokstäverna som ett kort namn i fältet small_name du kan använda:

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. Hur validerar man e-postadress med PL/SQL?

  2. Interner i de sju SQL-serversorterna – Del 2

  3. Räkna rekord för varje månad under ett år

  4. android SQLite-databas med databas på specifik plats möjligt?