Mysql
 sql >> база данни >  >> RDS >> Mysql

Когато се добави нов ред в базата данни, трябва да се извика външна програма за команден ред

Чад Бърч има добра идея с използването на Задействания на MySQL и дефинирана от потребителя функция . Можете да научите повече в Синтаксис на MySQL CREATE TRIGGER справка.

Но сигурни ли сте, че трябва да извикате изпълним файл веднага, когато редът е вмъкнат? Изглежда, че този метод ще бъде склонен към неуспех, тъй като MySQL може да създаде множество екземпляри на изпълнимия файл едновременно. Ако вашият изпълним файл се провали, тогава няма да има запис кои редове все още са били обработени и кои не. Ако MySQL чака вашият изпълним файл да завърши, тогава вмъкването на редове може да е много бавно. Освен това, ако Чад Бърч е прав, тогава ще трябва да прекомпилира MySQL, така че звучи трудно.

Вместо да извиквам изпълнимия файл директно от MySQL, бих използвал тригери, за да запиша просто факта, че даден ред е ВМЕШЕН или АКТУАЛИЗИРАН:запишете тази информация в базата данни, или с нови колони в съществуващите ви таблици, или с чисто нова таблица, наречена say database_changes . След това направете външна програма, която редовно чете информацията от базата данни, обработва я и я маркира като готова.

Вашето конкретно решение ще зависи от това какви параметри всъщност се нуждае външната програма.

Ако вашата външна програма трябва да знае кой ред е вмъкнат, тогава вашето решение може да бъде следното:Направете нова таблица, наречена database_changes с полета date , table_name и row_id , а за всички останали таблици направете тригер по този начин:

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;

Тогава вашият пакетен скрипт може да направи нещо подобно:

  1. Изберете първия ред в таблицата database_changes.
  2. Обработете го.
  3. Премахнете го.
  4. Повторете 1-3, докато database_changes е празен.

С този подход можете да имате повече контрол върху това кога и как данните се обработват и можете лесно да проверите дали данните действително са обработени (просто проверете дали database_changes таблицата е празна).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените НАБОР ОТ СИМВОВЕ (и СЪБОРЯВАНЕ) в цялата база данни?

  2. Обосновка на спиращите думи в пълен текст на MySQL

  3. SQL Показване на последния запис в GROUP BY?

  4. Отделете различна версия на уебсайт

  5. API на Google Maps v3:Как да настроите нивото на мащабиране и центъра на картата към местоположение, предоставено от потребителя?