Function/Procedure/Trigger MySQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Function/Procedure/Trigger MySQL

Re: Function/Procedure/Trigger MySQL

par Nours312 » 12 mai 2010, 22:18

oui !... et je te comprends bien Zeus !... par habitude je fonctionnerais aussi comme ça,
Actuellement j'avais fait des procédures, mais le fait de les appeler suite à un TRIGGER semble en effet dans la logique des choses !

cela dit, dans le cas présent, je ne souhaites pas tant que ça que quelqu'un passe après moi, (vu qu'il est convenu que je prennent en charge les évolutions à venir ^^) ... et nous attendons à moyens termes 3000 Utilisateurs simultanés !... donc dans l'état, les procédures peuvent être appelées en période de forte charge prés d'un millier de fois à la seconde ... (il peux y avoir 10 fenêtres de t'chat ouvertes en simultanés par utilisateur ^^ ... => ajax :D ) donc dans un souci d'optimisation, j'essaye de grappiller à droite et à gauche !... qui à passer pour un escroc vis à vis d'apache !..

Re: Function/Procedure/Trigger MySQL

par zeus » 12 mai 2010, 21:08

Je sais que, en tant que professionnel, je préfère mettre en avant la maintenabilité au gain de quelques microsecondes par exécution.
Surtout qu'il y a des optiques d'optimisations beaucoup plus importantes que ça ;)

Re: Function/Procedure/Trigger MySQL

par Nours312 » 12 mai 2010, 20:02

oki !.. merci pour ton avis, et la logique est bonne !... maintenant, au niveau des ressources, ça a ne influence, je suppose ... et je ne penses pas que de faire un trigger ET une procédure soit le plus "économique" .. mais je me trompe peut-etre ...

Re: Function/Procedure/Trigger MySQL

par zeus » 12 mai 2010, 18:33

Pour moi, il faut distinguer deux choses :
- le traitement (celui qui insert les données dans plusieurs tables)
- le déclenchement (l'insertion dans la 1ère table)

Ainsi, sur ce que tu me décrit, j'aurais fait un procédure qui fait toutes tes insertions. Et j'aurais appelé cette procédure depuis un trigger ON INSERT sur la 1ère table.

Re: Function/Procedure/Trigger MySQL

par Nours312 » 12 mai 2010, 18:27

Merci zeus ;) ...

juste deux points supplémentaires à ce sujet :
Tout d'abord, la différence fondamentale entre une procédure et une fonction, c'est que la procédure ne retourne rien.
(...) La liste de paramètre entre parenthèses est obligatoire. S'il n'y a pas de paramètre, une liste vide sous la forme () doit être utilisée. Chaque paramètre est un paramètre de type IN par défaut. Pour spécifier un autre type, utilisez les mots OUT ou INOUT avant le nom du paramètre. Spécifier IN, OUT ou INOUT n'est valable que pour une PROCEDURE. (...)
il est vrai que je me suis mal exprimé, ce qui a du t'induire en erreur, je m'en sert pour retourner les INSERT_ID lorsque ceux que je souhaite retourner ont aussi été utilisés au sein de la procédure pour insérer d'autres informations au seins d'autres tables ... (il ne sont plus les derniers donc je ne peux les récupérer de l'extérieur de la procédure) ...

mais pour en revenir donc au sujet de base ::

mis à part la philosophie, qu'est ce qui serait le plus rapide/cohérent d'utiliser entre le trigger et la procédure pour faire ceci :

=> insertion dans une table , mais aussi ::
- injecter un message prédéfini dans une autre table,
- incrémenter un compteur dans une autre table
- mettre à jour une date dans une troisième table ...

car au final, ses 3 opérations sont liées au fait que j'ajoute une ligne dans la première table, et devront être effectuées à chaque fois que j'effectue un insert ..

Merci par avance ;)

Re: Function/Procedure/Trigger MySQL

par zeus » 12 mai 2010, 18:10

Tout d'abord, la différence fondamentale entre une procédure et une fonction, c'est que la procédure ne retourne rien.

Ensuite, un trigger porte sur une table, et par conséquence, doit être utilisée pour effectuer des opérations fortement liées au contenu de cette table. Par exemple, les différentes opérations qui garantissent l'intégrité de la table en question, ou encore les initialisations liées aux données de la table, ...
Les fonctions/procédures sont plus orientées traitement et permettent de réaliser une opération complexe (création d'un enregistrement dans 3 tables, avec initialisation, ...)

C'est donc la description fonctionnelle de ce que tu veux faire qui te permet de choisir entre trigger et procédure/fonction.

Function/Procedure/Trigger MySQL

par Nours312 » 11 mai 2010, 23:18

Salut !...

je me pose une question ... quel sont leurs rôles les plus appropriés !? et pourquoi choisir l'un plus que l'autre ?

je ne suis pas bon en optimisation MySQL et je commence juste (depuis un petit mois) à m'intéresser à cette partie de la programmation.

Donc, je me sert actuellement de procédures et de fonctions ... et j'ai des procédure qui ont pour rôle d'effectuer divers opérations d'insertion dans différentes tables certaines retournent des infos, mais d'autre non !...
Et je me disais :: peut-être serait il plus judicieux d'utiliser des TRIGGER plutôt que des Procédures, dans certains cas ... mais dans lesquels ? lorsqu'il n'y a que deux insertion ? ou même dans le cas ou il y a 10 insertions ?
Et quel est la différence au niveau de la consommation des ressources ?

Donc, je suis preneur de toutes infos sur le sujet, même la plus minime :D, merci bien par avance ;)