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

Czy w wyzwalaczu MySQL można ustawić zmienną użytkownika za pomocą NEW.col i użyć jej w zapytaniu aktualizacyjnym?

Nie jest to możliwe, jak opisano w dynamicznej instrukcji sql / Prepared Statement. Spowoduje to wygenerowanie Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger po próbie nawet CREATE TRIGGER .

Najbardziej zbliżonym podejściem do automatyzacji jest użycie CREATE EVENT . Zdarzenia to zaplanowane, zapisane programy, które działają zgodnie z wybranym przez Ciebie harmonogramem/interwałem. Przedziały to:

Możesz ustawić „flagę”, że tak powiem, w wierszu, na przykład w tabeli, którą przedstawiasz powyżej, która ma wyzwalacz po wstawieniu. Zdarzenie może następnie wykonać Przygotowana instrukcja dynamicznie i uruchom go.

Zobacz moją odpowiedź tutaj na Zarządzanie wydarzeniami .

Muszę powiedzieć, że nawet jeśli bierzesz udział w wydarzeniu, to, co proponujesz, to prawie Zawsze oznaka słabego projektu schematu, który nie wytrzymywałby dobrze oceny wzajemnej.

Powodem, dla którego nie wolno używać dynamicznego sql i Prepared Stmt, jest to, że wyzwalacz musi być szybki, a nawet DDL może zostać przemycony do łańcucha i wykonany. I instrukcje DDL, takie jak ALTER TABLE są niedozwolone w wyzwalaczach (dosłowne uruchomienie może zająć kilka godzin).

Twój schemat może równie dobrze mieć jedną tabelę współdzieloną z kolumną ven_code będąca kolumną różnicującą. Zamiast tego zdecydowałeś się utworzyć nowe tabele dla każdego ven_code . To zazwyczaj jest kiepski wybór projektu i wydajności.

Jeśli potrzebujesz pomocy przy projektowaniu schematu, z przyjemnością porozmawiam o tym na czacie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - lewe połączenie 2 kluczy obcych z 1 kluczem podstawowym

  2. Wstaw wartości do niestandardowej tabeli po złożeniu zamówienia w Woocommerce

  3. Przecięcie zakresu dat w SQL

  4. Mysql Nieprawidłowy format daty i godziny:1292 Nieprawidłowa wartość daty i godziny podczas tworzenia fikcyjnych danych do testowania

  5. MySQL `PRZED INSERT TRIGGER` jak mogę pominąć wstawianie danych pod warunkiem?