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 :

Question sur les triggers


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Question sur les triggers
    Bonsoir à tous.

    Voilà le problème: j'ai une table A dans laquelle on fait un INSERT INTO, un trigger se déclenche alors pour vérifier dans une table B si il existe une entrée sous le même ID. S'il n'existe pas, on fait un INSERT sur cette table B et on entre une nouvelle ligne avec pour ID celui de la nouvelle ligne de A (id=new.id en gros).

    Seulement, est-il possible avant ça et avec un trigger, de prendre l'id le plus haut dans la table B (SELECT MAX(ID) FROM B...), d'ajouter 1, et de modifier la requête d'insertion qui a déclenché le trigger de manière a ce que son id vaille le MAX(ID)+1 de la table B ?

    Pour récapituler:

    insert into A values ('');
    déclenchement du trigger qui nous donne à l'arrivée
    insert into B values ('id')
    insert into A values ('id')

    (id étant le résultat du SELECT MAX(ID) FROM B).

    J'espère avoir été compréhensible, merci

    PS: (j'utilise MySQL 5.0, si ça peut aider).

  2. #2
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 93
    Points
    93
    Par défaut
    Salut,

    est-ce que j'ai bien compris :

    tu voudrais modifier l'id inséré dans A (id) avec la valeur trouvée (max(id) +1) dans B si la donnée insérée n'existe pas dans B ?

    Est-ce bien ça ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Tout à fait

  4. #4
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 93
    Points
    93
    Par défaut
    Dans ce cas :

    Je ne sais pas comment modifier une requête en cours, désolé (je ne sais même pas si c'est possible)


    Je ne vois qu'une solution pour le moment :
    1. Tu laisse l'insertion dans A
    2. Tu test avec un deuxième trigger s'il existe dans B un même id si oui alors tu update ta table A avec la valeur qu'il faut?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Non ça n'est pas ça. Je vais expliquer un peu plus:

    En fait, la table A hérite de B, de même que C et D.

    A chaque ID de A, C ou D doit correspondre un ID de B, donc avant chaque insertion dans A, C ou D, un trigger se déclenche pour voir si l'ID existe dans B:

    - S'il n'existe pas, on insère dans B la nouvelle ligne.
    -Dans tout les cas, l'insertion s'effectue dans A.

    Un deuxième trigger entre alors en jeu, après l'insertion:

    - Si à l'ID de l'insertion correspond un ID de C ou D, on DELETE la nouvelle insertion dans A.
    - Sinon, on ne fait rien.

    Cet ensemble de deux triggers sur chaque table A, C et D m'assure qu'aucune occurrence de A, C ou D se retrouvera dans ses tables voisines.

    Le problème est pour l' AUTO_INCREMENT: les premières insertions dans A, C ou D se font très bien, mais dès qu'on insère dans une table différente, les id repartent à 1 et du coup le trigger ne permet pas l'insertion.

    D'où l'intérêt de choper le dernier id de B, de l'incrémenter et de le coller à la nouvelle insertion

    Tout ça afin d'éviter de gérer soi-même les id.

Discussions similaires

  1. Une chti't question sur les trigger
    Par yvancoyaud dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/11/2012, 10h38
  2. Question sur les trigger avec Forms 9i
    Par Arnaud13 dans le forum Forms
    Réponses: 0
    Dernier message: 29/01/2010, 10h44
  3. Question sur les triggers
    Par guidav dans le forum Développement
    Réponses: 3
    Dernier message: 31/08/2009, 18h39
  4. 4 questions sur les triggers systeme
    Par ZashOne dans le forum Administration
    Réponses: 2
    Dernier message: 02/11/2007, 14h52
  5. Question urgente sur les triggers
    Par devdev dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/11/2004, 10h38

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