Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Fehler:Tabelle in gespeicherter Funktion/Trigger kann nicht aktualisiert werden, da sie bereits von der Anweisung verwendet wird, die diese gespeicherte Funktion/Trigger aufgerufen hat

Sie können eine Tabelle nicht ändern, während der INSERT-Trigger ausgelöst wird. Das INSERT kann einige Sperren ausführen, was zu einem Deadlock führen kann. Außerdem würde das Aktualisieren der Tabelle von einem Trigger dazu führen, dass derselbe Trigger erneut in einer endlosen rekursiven Schleife ausgelöst wird. Diese beiden Gründe sind der Grund, warum MySQL Sie daran hindert.

Je nachdem, was Sie erreichen möchten, können Sie jedoch auf die neuen Werte zugreifen, indem Sie NEW.fieldname verwenden, oder sogar auf die alten Werte – wenn Sie ein UPDATE durchführen – mit OLD.

Wenn Sie eine Zeile mit dem Namen full_brand_name hatten und Sie wollten die ersten beiden Buchstaben als Kurznamen im Feld small_name verwenden Sie könnten verwenden:

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