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 :

séquence et clé primaire


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Par défaut séquence et clé primaire
    bonjour tous
    j'ai 3 tables A, B et C
    j'ai besoin que les valeurs de la clé primaire de A n'appartinnent pas à ceux des clés primaires de B et ceux de C et vise versa pour les autres
    clé primaire = int
    c'est à dire que si 1 comme clé primaire dans A alors il ne doit pas apparaître comme clé primaire pour les tables B et C
    et vise versa
    J'ai pensé à utiliser une même séquence pour les 3 tables, mais je ne sais pas comment ça marche sur mysql
    alors si vous pouvez m'aider, merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Sur MySQL (comme sur tous les SGBD autres qu'Oracle), il n'y a pas de séquence, mais des colonnes-clés autoincrémentées.

    Tu peux toutefois obtenir le même résultat en créant une table qui ne comporterait qu'une seule colonne, en auto_increment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table seq(num int auto_increment primary key) ;
    Pour obtenir un numéro séquentiel, tu fais une insertion dans cette table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into seq(num) values(default) ;
    Tu récupères ensuite le numéro séquentiel avec la fonction LAST_INSERT_ID() (en SQL) ou mysql_insert_id() (en PHP). Attention, cette fonction doit être utilisée immédiatement après ton insertion. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into seq(num) values(default) ;
    insert into A (ID, col2, col3) values(LAST_INSERT_ID(), 'toto', 'tata') ;
    insert into seq(num) values(default) ;
    insert into B (ID, col2, col3) values(LAST_INSERT_ID(), 'toto', 'tata') ;
    insert into seq(num) values(default) ;
    insert into C (ID, col2, col3) values(LAST_INSERT_ID(), 'toto', 'tata') ;

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 145
    Par défaut
    Bonne astuce
    Merci pour votre aide , ça a marché

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

Discussions similaires

  1. OJB : générer une clé primaire via une séquence
    Par dams78 dans le forum Persistance des données
    Réponses: 1
    Dernier message: 25/08/2010, 09h52
  2. Création clé primaire avec une séquence
    Par richard_sraing dans le forum PL/SQL
    Réponses: 0
    Dernier message: 14/11/2008, 00h36
  3. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  4. Problème pour récupérer la clé primaire
    Par caramel dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2003, 13h57
  5. Extraire une séquence d'un fichier MPEG
    Par enzosp dans le forum DirectX
    Réponses: 2
    Dernier message: 24/02/2003, 11h30

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