IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

TRIGGER quid de leur utilisation ?


Sujet :

SQL Procédural MySQL

  1. #1
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    Par défaut TRIGGER quid de leur utilisation ?
    Bonjour,

    Les fonctions de TRIGGER pour des contrôles sur la base sont assez faciles à saisir. Mais je ne perçois pas complètement leur intérêt.
    En fait, la mécanique m'échappe. Peut-on m'éclaire un peu sur leur utilisation les plus courantes ? Où écrit-on les codes de ces trigger ? A la suite d'une requête ? dans des fichiers à part ? Qui les déclenchent ?

    Peut-être que je me complique la vie. Il s'agit de simple requête se déclenchant après ou avant une autre ???

    Merci pour vos éclaircicements
    "n'imprimez ces messages que si nécessaire... Préservez notre planète"

  2. #2
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Sur chaque table tu peux mettre des triggers sur une combinaison de 6 au total.
    Avant et Après le déclenchement d'une suppression d'une ligne
    Avant et Après le déclenchement d'une modification d'une ligne
    Avant et Après le déclenchement d'une insertion de ligne.

    En gros, cela permet de déclencher une opération SQL lorsqu'une ligne à été chatoullé.
    Personnellement, je l'utilise pour enregistrer toute modification opéré sur la table. Voici un exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE TRIGGER `zorha_prd_refio_after_del_tr` AFTER DELETE ON `zorha_prd_refio`
      FOR EACH ROW
    BEGIN
         DECLARE DateNow DATETIME;
         DECLARE RefId   CHAR(36);
         IF getParameter('log_refio') = '1' THEN
            SET RefId   = RefIO();
            SET DateNow = NOW();
            CALL NewLog('zorh_prd_refio', 'idrefio',   old.idrefio,   'DELETED', DateNow, RefId);
            CALL NewLog('zorh_prd_refio', 'idrefout',  old.idrefout,  'DELETED', DateNow, RefId);
            CALL NewLog('zorh_prd_refio', 'date_crea', old.date_crea, 'DELETED', DateNow, RefId);
         END IF;
    END|
    Dans cette exemple si une ligne est supprimé alors il enregistre dans une table de log les valeurs avant qu'elle soit supprimé. Pourquoi ? Parce que c'est BEFOR DELETE. C'est à dire. Fait cette opération avant que la ligne soit supprimé.

    Les trigger permet de se passer d'un language tier pour faire des opérations automatique lors d'une opération d'écriture. Elle sert aussi à ce qu'il y ait pas un utilisateur qui travail directement sur la base de données et fausse les données.

    Tu peux par exemple faire en sorte que le nom soit toujours enregistré avec une majuscule.
    De formater un nom.
    Faire des suppression propre.
    Que les enregistrements soit multiple. C'est à dire que si tu fais un insert dans une table. La même opération doit se faire tout en partie sur une autre table. A partir d'un INSERT ça provoque un autre INSERT dans une autre table.

    Attention, car trop de trigger peut créer des opérations en cascade et peut parfois créer un anneaux qui peut bloquer une base de données. Le serpent mange sa queue.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  3. #3
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    Par défaut dernière question...
    Bonjour,

    Merci berceker united pour cette réponse détaillée.
    Juste une dernière question : Tu places ce code où ? sur une page php ?

    Merci
    "n'imprimez ces messages que si nécessaire... Préservez notre planète"

  4. #4
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par elvan49 Voir le message
    Bonjour,

    Merci berceker united pour cette réponse détaillée.
    Juste une dernière question : Tu places ce code où ? sur une page php ?

    Merci
    Dans un éditeur SQL. Il faut l'executer qu'une fois. Depuis phpMyadmin je ne sais pas si c'est facile car il n'est pas tellement fait pour cela.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #5
    Membre actif Avatar de elvan49
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 274
    Points : 204
    Points
    204
    Par défaut table SQL
    Une idée comme ça...
    On peut créer une table qui renferme les scripts SQL de type Trigger
    et on les appelle en fonction des besoins (du coup dans phpMyAdmin c'est tranquile)...

    Sinon, je te remercie pour tout ça, j'ai pigé l'essentiel et je vais pouvoir bricoler.
    "n'imprimez ces messages que si nécessaire... Préservez notre planète"

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par elvan49 Voir le message
    Une idée comme ça...
    On peut créer une table qui renferme les scripts SQL de type Trigger
    et on les appelle en fonction des besoins (du coup dans phpMyAdmin c'est tranquile)...

    Sinon, je te remercie pour tout ça, j'ai pigé l'essentiel et je vais pouvoir bricoler.
    Non tu ne peux pas. Ils s'execute automatiquement. Eventuellement via php mais une seul fois.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment activer les trigger lors de l'utilisation d'un lot DTS ?
    Par buffquiche dans le forum Développement
    Réponses: 1
    Dernier message: 07/02/2008, 09h04
  2. Réponses: 2
    Dernier message: 14/12/2007, 01h47
  3. [C#] Questions sur les webmethodes et leur utilisation
    Par NoiBe dans le forum Services Web
    Réponses: 10
    Dernier message: 14/12/2006, 08h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo