Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/11/2006, à 19:55

marsu44

trigger Mysql et programme

Bonjour!!!!

Je cherche à savoir si le lancement de programme est possible avec un trigger dans mysql, un peu comme ça se fait sous AS/400 et les bases DB2 ???
je développe une appli qui fait des calcul assez complexe et j'aurai besoin de mettre à jour des tables après l'insertion de ligne dans mysql.
En gros le trigger se déclenche et active le programme....

Si un ti génie de tout ça passe par là, et bin merci!!!



Marsu wink

Hors ligne

#2 Le 03/11/2006, à 23:51

snapshot

Re : trigger Mysql et programme

http://dev.mysql.com/doc/refman/5.0/fr/ … igger.html

Mais il me semble impossible d'appeler via un trigger un programme externe.
Un trigger ne peut qu'exécuter que des commandes SQL (qui peuvent être certes très complexes).

Je ne connais pas assez MySQL pour juger, mais pour faire des choses complexes, il est peut être un peu trop léger (bien qu'il ait beaucoup évolué ces derniers temps). PostgresSQL dispose depuis plus longtemps de triggers, procédure stockées, transactions...


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#3 Le 06/11/2006, à 00:00

marsu44

Re : trigger Mysql et programme

Hi!!
Merci de ta réponse

Tu parles de transactions va PostgresSQL, c'est tout a fait ce que je recherche comme principe.
Dans mon Boulot, je bosse sur les bases DB2 d'IBM et on utilise ces fameuses transactions via l'activation des triggers.
je vais chercher plus loin dans la doc MySQL pour voir si il peut faire ça également.

Marsu wink

Dernière modification par marsu44 (Le 06/11/2006, à 00:18)

Hors ligne

#4 Le 06/11/2006, à 11:56

snapshot

Re : trigger Mysql et programme

Grosso modo, tu as le choix entre MySQL et PostgresSQL.

On dit de MySQL qu'il est plus rapide que Postgres... C'est peut-être vrai, mais il ne fait (faisait) pas le quart de ce que fait postgres.

Il semble que les dernière versions de MySQL te permette d'écrire des procédure stockées... uniquement à base de SQL. Avec postgres, tu as le choix entre des procédures en SQL, en plpgsql (un clone du PL/QSL d'oracle, avec des IF, des WHILE, des variables...) et maintenant en python !
En postgres, tu peux faire des requetes style SELECT ... WHERE id in (SELECT id ... EXCEPT SELECT id ....) LEFT JOIN (SELECT ...)
En mysql, tu dois passer par des tables temporaires, avec des deletes et des insert à répétition, forcément moins optimisées que ce que peut faire postgres...

Donc voilà,
Si tu es habitué à des bases puissantes et pleines de fonctions, utilises Postgres.
Si tu cherches la rapidité pour des applis simples, utilise MySQL.


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#5 Le 06/11/2006, à 15:23

marsu44

Re : trigger Mysql et programme

RE merci
Je vois que tu t'es bien penché sur le sujet cool .
Perso question bases puissante, DB2 = OK. Mais j'en utilise qu'une infime partie, nos admin DB2 sont là pour bosser dis donc!! Moi je fais seulement des Select de loser!! LoL.
Enfin, Bref, passons.....

Pour ma part le PC que j'utilise contient un serveur web (notre indien préféré) , Mysql, et php.
......
Attention là je vais m'écarter du sujet.....
......
Lors des accès sur le site web, différentes bases Mysql rentrent en jeux. Et en fonction des différents accès (delete, insert et update), le déclanchement de trigger me permettrai d'executer des programmes qui effectueraient des calculs sur les données.
Mais pitêtre qu'il existe des fonctions en c/c++ pour surveiller les tables. Et ainsi, je n'aurai plus qu'a créer un dénom à ma sauce! (perso je ne sais pas très bien cuisiner des plats aussi élaborés).

Enfin c'est juste une idée...
Il va falloir que j'ailles voir les ti gens au développement maintement.

Marsu wink

Hors ligne

#6 Le 06/11/2006, à 16:00

snapshot

Re : trigger Mysql et programme

Franchement, les triggers je pense que ce n'est pas forcément une bonne idée...

Avant, j'avais tendance à les utiliser, mais je me suis rendu compte que ça ne posait souvent plus de problèmes que ça en resolvait, ou alors il faut les utiliser avec parcimonie

Maintenant, pour faire les mises à jour "calculées", plutot que de lancer un long calcul en cascade à un update, j'utilise une colonne last_update et last_export qui ont pour valeur par défaut '-infinity' (ce qui veut dire jamais). Quand un programme fait un update sur un enregistrement, il met la date et heure courante dans last_update.
Et parallélement à cela, on crée un programme de mise à jour qui se réveille a espacement constant (avec un cron, c'est facile), et qui fait un select sur la table, avec comme critère: WHERE last_export<last_update, ce qui sélectionne tous les enregistrements à recalculer. Une fois l'enregistrement traité, on positionne last_export à la date et heure courante (pour ne pas les reprendre la fois suivante).

Ainsi, comme on a last_update = date de mise à jour et last_export = date du calcul, on sait toujours où on en est dans la base, quels sont les enregistrements à jours et ceux à recalculer.

Bien sur, il faut accepter qu'il y ait un léger décallage entre les données stockées et les calculs... Mais avec un processus distinct de mises à jour, c'est plus propre, et on controle mieux la charge du serveur


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#7 Le 06/11/2006, à 22:44

gene69

Re : trigger Mysql et programme

mais tu n'es plus du tout atomique dans ta mise à jour de la table.
c'est tout.


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#8 Le 06/12/2006, à 20:12

Yves-Antoine

Re : trigger Mysql et programme

marsu44 a écrit :

Hi!!
Merci de ta réponse

Dans mon Boulot, je bosse sur les bases DB2 d'IBM et on utilise ces fameuses transactions via l'activation des triggers.

Marsu wink

Bonjour Marsu,

J'ai tenté d'installer un DB2 9 Express-C (non libre, mais gratuit), sous Ubuntu Edgy, et bien qu'IBM ne supporte pas officiellement cette configuration, cela fonctionne. Pour télécharger le produit :

http://www-306.ibm.com/software/data/db2/express/download.html

Si tu installes le fixpack 1, il faut convertir un .rpm en .deb avec alien... et cela fonctionne aussi !

Yves-Antoine

#9 Le 18/12/2006, à 12:32

marsu44

Re : trigger Mysql et programme

RE Hi!
et RE Merci

Marsu! wink

Hors ligne