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

Po dodaniu nowego wiersza w bazie danych należy wywołać zewnętrzny program wiersza poleceń

Chad Birch ma dobry pomysł na użycie Wyzwalacze MySQL i funkcja zdefiniowana przez użytkownika . Więcej informacji znajdziesz w Składni MySQL CREATE TRIGGER odniesienie.

Ale czy na pewno musisz wywołać plik wykonywalny od razu po wstawieniu wiersza? Wygląda na to, że ta metoda będzie podatna na niepowodzenie, ponieważ MySQL może tworzyć wiele instancji pliku wykonywalnego w tym samym czasie. Jeśli plik wykonywalny ulegnie awarii, nie będzie rekordu, które wiersze zostały już przetworzone, a które nie. Jeśli MySQL czeka na zakończenie działania pliku wykonywalnego, wstawianie wierszy może być bardzo powolne. Ponadto, jeśli Chad Birch ma rację, będzie musiał ponownie skompilować MySQL, więc wydaje się to trudne.

Zamiast wywoływać plik wykonywalny bezpośrednio z MySQL, użyłbym wyzwalaczy, aby po prostu zarejestrować fakt, że wiersz został WSTAWIONY lub ZAKTUALIZOWANY:zapisz te informacje w bazie danych, albo z nowymi kolumnami w istniejących tabelach, albo z zupełnie nową tabelą o nazwie powiedz database_changes . Następnie stwórz zewnętrzny program, który regularnie odczytuje informacje z bazy danych, przetwarza je i oznacza jako wykonane.

Twoje konkretne rozwiązanie będzie zależeć od tego, jakich parametrów faktycznie potrzebuje zewnętrzny program.

Jeśli Twój zewnętrzny program musi wiedzieć, który wiersz został wstawiony, rozwiązanie może wyglądać tak:Utwórz nową tabelę o nazwie database_changes z polami date , table_name i row_id , a dla wszystkich innych tabel utwórz wyzwalacz w ten sposób:

CREATE TRIGGER `my_trigger`
AFTER INSERT ON `table_name`
FOR EACH ROW BEGIN
  INSERT INTO `database_changes` (`date`, `table_name`, `row_id`)
  VALUES (NOW(), "table_name", NEW.id)
END;

Wtedy twój skrypt wsadowy może zrobić coś takiego:

  1. Wybierz pierwszy wiersz w tabeli database_changes.
  2. Przetwórz to.
  3. Usuń go.
  4. Powtarzaj 1-3, aż database_changes jest pusty.

Dzięki takiemu podejściu możesz mieć większą kontrolę nad tym, kiedy i jak dane są przetwarzane, a także możesz łatwo sprawdzić, czy dane rzeczywiście zostały przetworzone (po prostu sprawdź, czy database_changes tabela jest pusta).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utrzymanie porządku w zapytaniu MySQL IN

  2. Który jest szybszy:skorelowane podzapytania czy dołączanie?

  3. Data przechowywania Redbean O/RM jako varchar(255)?

  4. BŁĄD 1005 (HY000):Nie można utworzyć tabeli (errno:150)

  5. mysql - przenieś wiersze z jednej tabeli do drugiej