Tchad Birch a une bonne idée à l'utilisation MySQL triggers and a user-defined function. Vous pouvez en savoir plus dans la référence MySQL CREATE TRIGGER Syntax. Mais êtes-vous sûr de devoir appeler immédiatement un exécutable lorsque la ligne est insérée? Il semble que cette méthode sera sujette à l'échec, car MySQL peut générer plusieurs instances de l'exécutable en même temps. Si votre exécutable échoue, il n'y aura aucun enregistrement des lignes qui ont été traitées et celles qui ne l'ont pas encore été. Si MySQL attend la fin de votre exécutable, l'insertion de lignes risque d'être très lente. Aussi, si Chad Birch a raison, il devra alors recompiler MySQL, donc cela semble difficile. Au lieu d'appeler l'exécutable directement à partir de MySQL, j'utiliserais des déclencheurs pour enregistrer simplement le fait qu'une ligne a été INSÉRÉE ou UPDATED: enregistrer cette information dans la base de données, soit avec de nouvelles colonnes dans vos tables existantes, soit avec un tout nouveau table appelée database_changes
. Créez ensuite un programme externe qui lit régulièrement les informations de la base de données, les traite et les marque comme terminées.
Votre solution spécifique dépendra des paramètres dont le programme externe a réellement besoin.
Si votre programme externe a besoin de savoir quelle ligne a été insérée, votre solution pourrait ressembler à ceci: Faire une nouvelle table appelée database_changes
avec des champs date
, table_name
et row_id
, et pour toutes les autres tables, faire un déclencheur comme ceci:
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;
Ensuite, votre script batch peut faire quelque chose comme ceci:
- Sélectionnez la première ligne de la table database_changes.
- Traitez le.
- Retirez-le.
- Répétez 1-3 jusqu'à ce que
database_changes
soit vide.
Avec cette approche, vous pouvez avoir plus de contrôle sur quand et comment les données ont été traitées, et vous pouvez facilement vérifier si les données réellement obtenu traitées (vérifier juste pour voir si la table database_changes
est vide).
Peut-être que cela vous aide: http://stackoverflow.com/questions/40025369/how-to-execute-external-script-app-command-from-mysql-server –
même chose dont j'ai besoin. plz m'aider à faire cela? je veux appeler exe depuis mon trigger mysql @Graviton – Karthi