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