Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd MySql:nie można zaktualizować tabeli w przechowywanej funkcji/wyzwalaczu, ponieważ jest już używana przez instrukcję, która wywołała tę przechowywaną funkcję/wyzwalacz

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić rozmiar wszystkich tabel w bazie danych w MySQL?

  2. MySQL:jak uzyskać długość tekstu w kolumnie?

  3. nodejs mysql Błąd:Utracono połączenie Serwer zamknął połączenie

  4. PDO::PARAM dla typu dziesiętnego?

  5. SCHEMA() Funkcja w MySQL