Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wenn eine neue Zeile in der Datenbank hinzugefügt wird, muss ein externes Befehlszeilenprogramm aufgerufen werden

Chad Birch hat eine gute Idee mit der Verwendung von MySQL-Trigger und eine benutzerdefinierte Funktion . Weitere Informationen finden Sie in der MySQL CREATE TRIGGER Syntax Referenz.

Aber sind Sie sicher, dass Sie sofort eine ausführbare Datei aufrufen müssen, wenn die Zeile eingefügt wird? Es scheint, dass diese Methode fehleranfällig ist, da MySQL mehrere Instanzen der ausführbaren Datei gleichzeitig hervorbringen kann. Wenn Ihre ausführbare Datei fehlschlägt, gibt es keine Aufzeichnung darüber, welche Zeilen bereits verarbeitet wurden und welche nicht. Wenn MySQL darauf wartet, dass Ihre ausführbare Datei beendet wird, kann das Einfügen von Zeilen sehr langsam sein. Außerdem, wenn Chad Birch recht hat, muss MySQL neu kompiliert werden, also klingt es schwierig.

Anstatt die ausführbare Datei direkt von MySQL aufzurufen, würde ich Trigger verwenden, um einfach die Tatsache aufzuzeichnen, dass eine Zeile INSERTED oder UPDATED wurde:Zeichnen Sie diese Informationen in der Datenbank auf, entweder mit neuen Spalten in Ihren vorhandenen Tabellen oder mit einer brandneuen Tabelle namens sagen wir database_changes . Erstellen Sie dann ein externes Programm, das die Informationen regelmäßig aus der Datenbank liest, verarbeitet und als erledigt markiert.

Ihre spezifische Lösung hängt davon ab, welche Parameter das externe Programm tatsächlich benötigt.

Wenn Ihr externes Programm wissen muss, welche Zeile eingefügt wurde, könnte Ihre Lösung so aussehen:Erstellen Sie eine neue Tabelle mit dem Namen database_changes mit Feldern date , table_name und row_id , und erstellen Sie für alle anderen Tabellen einen Trigger wie diesen:

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;

Dann kann Ihr Batch-Skript so etwas tun:

  1. Wählen Sie die erste Zeile in der Tabelle database_changes aus.
  2. Verarbeiten.
  3. Entfernen.
  4. Wiederholen Sie 1-3 bis database_changes ist leer.

Mit diesem Ansatz haben Sie mehr Kontrolle darüber, wann und wie die Daten verarbeitet werden, und Sie können leicht überprüfen, ob die Daten tatsächlich verarbeitet wurden (überprüfen Sie einfach, ob die Datei database_changes Tabelle ist leer).