sql >> Database teknologi >  >> RDS >> Mysql

Når en ny række i databasen tilføjes, skal et eksternt kommandolinjeprogram startes

Chad Birch har en god idé med at bruge MySQL-udløsere og en brugerdefineret funktion . Du kan finde ud af mere i MySQL CREATE TRIGGER-syntaks a> reference.

Men er du sikker på, at du skal kalde en eksekverbar med det samme, når rækken er indsat? Det ser ud til, at den metode vil være tilbøjelig til at mislykkes, fordi MySQL kan skabe flere forekomster af den eksekverbare på samme tid. Hvis din eksekverbare fejl fejler, vil der ikke være nogen registrering af, hvilke rækker der er blevet behandlet endnu, og hvilke der ikke er. Hvis MySQL venter på, at din eksekverbare fil er færdig, kan det være meget langsomt at indsætte rækker. Hvis Chad Birch har ret, bliver du også nødt til at kompilere MySQL igen, så det lyder svært.

I stedet for at kalde den eksekverbare direkte fra MySQL, ville jeg bruge triggere til blot at registrere det faktum, at en række blev INDSETT eller OPDATERET:optag den information i databasen, enten med nye kolonner i dine eksisterende tabeller eller med en helt ny tabel kaldet sige database_changes . Lav derefter et eksternt program, der jævnligt læser informationen fra databasen, behandler den og markerer den som udført.

Din specifikke løsning vil afhænge af, hvilke parametre det eksterne program faktisk har brug for.

Hvis dit eksterne program skal vide, hvilken række der blev indsat, så kunne din løsning være sådan her:Lav en ny tabel kaldet database_changes med felter date , table_name og row_id , og for alle de andre tabeller, lav en trigger som denne:

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;

Så kan dit batchscript gøre noget som dette:

  1. Vælg den første række i database_changes-tabellen.
  2. Behandle det.
  3. Fjern det.
  4. Gentag 1-3 indtil database_changes er tom.

Med denne tilgang kan du have mere kontrol over, hvornår og hvordan dataene bliver behandlet, og du kan nemt kontrollere, om dataene rent faktisk er blevet behandlet (bare tjek for at se, om database_changes tabellen er tom).



  1. 8 måder at tilføje minutter til en Datetime i MariaDB

  2. mySQL-forespørgsel:Hvordan indsætter man med UNION?

  3. Kan ikke oprette forbindelse til postgres fra fjernvært

  4. Jquery stjernevurdering tutorial ved hjælp af php og mysql