8791 sujets

Développement web côté serveur, CMS

Modérateur
Salut,

Pour ne pas pourrir le sujet de Miala, je préfère poser ma question à part. En gros, à quoi sert un trigger ? J'ai compris que c'est un déclencheur. Apparrament, cela permet de déclencher une action suite à une autre action ? Ma deuxième question est : Est ce que sur Mysql, il existe la même chose ? Je crois avoir compris que ça existe. Par contre, j'ai pas vraiment compris le procèder. Je vais toutefois regarder la doc officielle. Si vous avez un lien interressant, je suis preneur.

Merci par avance.

Bonne soirée à vous.
Modifié par Nolem (22 Apr 2009 - 19:31)
En effet un trigger est un declencheur, comme son nom l'indique.
Il sert donc a effectuer du code sql sur une action donnée, par exemple avant un insert.

Une utilisation assez courrante par exemple et de loguer la date de creation et la date de derniere modification d'une entrée.


delimiter //
CREATE TRIGGER mon_trigger BEFORE INSERT ON ma_table
FOR EACH ROW
BEGIN
    set new.dateCreation = now();
 END//
delimiter ;


et


delimiter //
CREATE TRIGGER mon_autre_trigger BEFORE UPDATE ON ma_table
FOR EACH ROW
BEGIN
    set new.dateModification = now();
 END//
delimiter ;


Mais c'est le plus simple des exemples, des triggers plus complexes peuvent faire plusieurs dixaines voire centaines de lignes.

Ca permet de gérer des règles métier directement dans la base quelque soit le code qui va venir toucher les tables.
Administrateur
En ce qui concerne le premier exemple on peut faire la même chose avec un champ timestamp en MySQL (c'est automatique).
Modérateur
Salut,

J'ai pas bien saisie la syntaxe. J'ai l'impression que la syntaxe est différente du petit select, update, etc. habituel. Ce qui me perd Smiley confus . J'ai bien vu que c'est seulement à partir de Mysql 5 qui accepte les trigger(s). J'ai vu que le gros avantages permet de gérer et de manipuler des données directement par Mysql. J'ai vraiment la bonne impression que c'est très pratique et plus rapide au final. Le soucis, je ne vois pas comment mettre ça en oeuvre. Est ce que les trigger(s) est/sont une pratique courante ? Est ce que Alsacreations les utilise par exemple ? Avez vous un petit lien (mis à part la doc officielle que j'ai parcourue mais qui me donne peu de mis en pratique) ou mieux un tuto ?

Merci par avance et bonne soirée à vous Smiley smile
Modifié par Nolem (11 Apr 2009 - 22:23)
Administrateur
Nolem a écrit :
Est ce que Alsacreations les utilise par exemple ?

Non, mais tout dépend de la situation.

C'est une pratique qui est plus courante avec Oracle, et qui tend à apparaître avec MySQL (qui ne les supportait pas dans les précédentes versions).
Nolem a écrit :
Salut,

J'ai pas bien saisie la syntaxe. J'ai l'impression que la syntaxe est différente du petit select, update, etc. habituel. Ce qui me perd Smiley confus . J'ai bien vu que c'est seulement à partir de Mysql 5 qui accepte les trigger(s). J'ai vu que le gros avantages permet de gérer et de manipuler des données directement par Mysql. J'ai vraiment la bonne impression que c'est très pratique et plus rapide au final. Le soucis, je ne vois pas comment mettre ça en oeuvre. Est ce que les trigger(s) est/sont une pratique courante ? Est ce que Alsacreations les utilise par exemple ? Avez vous un petit lien (mis à part la doc officielle que j'ai parcourue mais qui me donne peu de mis en pratique) ou mieux un tuto ?

Merci par avance et bonne soirée à vous Smiley smile


La syntaxe est differente des requetes classiques car ce n'est pas une requete.
C'est une syntaxe que tu lance une seule fois pour fabriquer le trigger et une fois en place on l'oublie.
La syntaxe qu'on t'as indiqué permet de fabriquer un déclencheur qui sera ensuite toujours existant, si tu veux le modifier par la suite, il faudra imperativement ajouter un drop trigger nomdutrigger avant la syntaxe de création, sans quoi mysql te dira que le trigger est déjà éxistant.
Pour comparer c'est un peu comparable à des fonctions en php (attention mysql gère aussi les fonctions et procédures stockées, qui ne sont pas des triggers).

Pour ce qui est de l'utilisation, tout dépend de tes besoins et de tes serveurs, au boulot j'ai un serveur mysql sur bixeon et 4Gb de ram pour lui tout seul, j'ai donc tendance à ne pas me priver en triggers et procédures stockées pour décharger un peu le serveur LAP (bah oui un LAMP sans mysql Smiley biggrin ), de plus si c'est sur un bon serveur, on gagne souvent en rapidité d'execution.
J'ai un traitement qui se faisait sur une appli windev avec des kilos de requetes, j'ai passé ça dans une procédure stockées, ça va 6-8 fois plus vite (on économise les échange appli<->mysql pour les requetes), c'est pareil pour les triggers.

Si un algo réclame plusieurs requetes et est appliqué à chaque update d'une table alors sans hésitation, il faut le passer en trigger, si le serveur mysql le permet (un LAMP sur un PC familial de puissance standard, le gain ne sera pas significatif).
A fortiori si apache et mysql ne sont pas sur la même machine, moins ils ont à discuter plus ça va vite, une requete c'est minimum 15ms sur un réseau local, 10 requetes c'est donc 1.5 dixième de seconde, ça peut vite monter.
Modérateur
Salut,

C'est bien ce qu'il me semblait que ça se configure en une seul fois. ça ma l'air très pratique pour certains besoins. En tout cas je vous remercie tous les deux de m'avoir donné ces precisions notamment sur les performances. Il me reste a comprendre comment élaborer un trigger. Je vais faire des recherches sur le net ou trouver un support papier à ce sujet.


Merci et bonne soirée à vous deux Smiley smile
Modifié par Nolem (12 Apr 2009 - 22:25)