Nie można zmienić tabeli, gdy wyzwalany jest wyzwalacz INSERT. INSERT może wykonać pewne blokowanie, które może spowodować zakleszczenie. Ponadto zaktualizowanie tabeli z wyzwalacza spowodowałoby ponowne uruchomienie tego samego wyzwalacza w nieskończonej pętli rekurencyjnej. Oba te powody sprawiają, że MySQL uniemożliwia Ci to.
Jednak w zależności od tego, co chcesz osiągnąć, możesz uzyskać dostęp do nowych wartości, używając NEW.fieldname lub nawet starych wartości — jeśli wykonujesz UPDATE — za pomocą OLD.
Jeśli masz wiersz o nazwie full_brand_name
i chciałeś użyć pierwszych dwóch liter jako krótkiej nazwy w polu small_name
możesz użyć:
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