sql >> Databáze >  >> RDS >> Mysql

Když je přidán nový řádek v databázi, musí být vyvolán externí program příkazového řádku

Chad Birch má dobrý nápad s použitím Spouštěče MySQL a uživatelsky definovaná funkce . Více se můžete dozvědět v syntaxi MySQL CREATE TRIGGER odkaz.

Jste si ale jisti, že po vložení řádku musíte okamžitě zavolat spustitelný soubor? Zdá se, že tato metoda bude náchylná k selhání, protože MySQL může vytvořit více instancí spustitelného souboru současně. Pokud váš spustitelný soubor selže, nebude zde žádný záznam o tom, které řádky byly dosud zpracovány a které ne. Pokud MySQL čeká na dokončení spustitelného souboru, může být vkládání řádků velmi pomalé. Také, pokud má Chad Birch pravdu, bude nutné překompilovat MySQL, takže to zní složitě.

Namísto volání spustitelného souboru přímo z MySQL bych použil spouštěče k jednoduchému zaznamenání skutečnosti, že řádek byl VLOŽEN nebo AKTUALIZOVÁN:zaznamenejte tyto informace do databáze, buď pomocí nových sloupců ve vašich stávajících tabulkách, nebo pomocí zcela nové tabulky s názvem say database_changes . Poté vytvořte externí program, který pravidelně čte informace z databáze, zpracovává je a označí jako hotové.

Vaše konkrétní řešení bude záviset na tom, jaké parametry externí program skutečně potřebuje.

Pokud váš externí program potřebuje vědět, který řádek byl vložen, vaše řešení by mohlo být toto:Vytvořte novou tabulku s názvem database_changes s poli date , table_name a row_id a pro všechny ostatní tabulky vytvořte spouštěč takto:

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;

Potom váš dávkový skript může udělat něco takového:

  1. Vyberte první řádek v tabulce database_changes.
  2. Zpracujte to.
  3. Odstraňte jej.
  4. Opakujte 1-3, dokud database_changes je prázdný.

Díky tomuto přístupu můžete mít větší kontrolu nad tím, kdy a jak jsou data zpracována, a můžete snadno zkontrolovat, zda byla data skutečně zpracována (stačí zkontrolovat, zda database_changes tabulka je prázdná).



  1. Spustit MySQL Server jako službu (Win 8)

  2. Ekvivalent RowID společnosti Oracle v MySQL

  3. Admin skripty v R12.2 Ebuisness Suite

  4. Jak nastavit strukturu indexu ElasticSearch s více vazbami entit