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

Installation MySQL Discussion :

clé étrangère et mySQL


Sujet :

Installation MySQL

  1. #1
    Membre confirmé Avatar de yasmine*
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut clé étrangère et mySQL
    Salut à tous
    je viens de créer ma 1 ère base de données mySQL sous phpMyAdmin la question que je me pose c'est comment peut-on exprimer une clé étrangère dans une table dans la clé primaire est un couple de 2 clés étrangère.
    merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Ta demande ne serait-elle pas :
    comment peut-on exprimer une clé étrangère SUR une table dont la clé primaire est formée de 2 colonnes

    Car sinon, l'expression d'une FK dans une table ne dépend pas du format de la PK de cette même table (1, 2 ou 10 colonnes dans la PK n'impactent pas le format d'une FK dans la même table)


    L'autre possibilité se rapporterait à une FK positionnée sur une PFK composite ?

    A toi de préciser ton contexte...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut
    Cela ne pose en principe pas de pb de créer une pk composée de cles étrangères.

    Voici un petit exemple pour créer une pk composée et son index .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE maTable ADD PRIMARY KEY (champ1, champ2);
    CREATE INDEX pk_maTable ON maTable (champ1, champ2);

  4. #4
    Membre confirmé Avatar de yasmine*
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut
    la question est simplement comment dire à une table que le champs col1 est une clé etrangère.
    je pose la question par ce que je vois rien du genre foreign key dans phpMyAdmin.
    merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut
    Pour pouvoir avoir une clé étrangère il faut que ta table soit de type InnoDB (et non MyISAM type par défaut).
    Après, un classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE table1 ADD FOREIGN KEY (col1) REFRENCES table2 (col2);
    doit marcher.

    ps: si soit + clair dans tes demandes

  6. #6
    Membre confirmé Avatar de yasmine*
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut
    ma question est bete mais je la pose comme meme vu que c'est ma 1 ere bd SQL.
    le problème j'ai deja créer toutes les tables par defaut(de type myISAM ) est -il possible de changer juste le type de ces tables vers innoBD sans devoir tout refaire?
    merci d'avance

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut
    Regarde ici

    à 1ère vu, on peut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE maTable TYPE=InnoDB;
    Pour créer tes futurs tables pense à préciser le type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE maFuturTable (...) TYPE=InnoDB;

  8. #8
    Membre confirmé Avatar de yasmine*
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Par défaut
    merci merci

  9. #9
    Membre éclairé Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Par défaut ok mais alors !!!
    J'ai essaié d'appliquer cette méthode mais mon phpmyadmin 2.9.2 voit toujours mes tables comme MyISAM et non comme InnoDB.
    J'ai appliqué cette manip sur toutes mes tables.

    Sous MySQL, j'ai changé le my.cnf (car j'utilise XAMPP) de cette façon:
    ################################################
    skip-innodb
    # Uncomment the following if you are using InnoDB tables
    innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
    innodb_data_file_path = ibdata1:10M:autoextend
    innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
    innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    set-variable = innodb_buffer_pool_size=16M
    set-variable = innodb_additional_mem_pool_size=2M
    # Set .._log_file_size to 25 % of buffer pool size
    set-variable = innodb_log_file_size=5M
    set-variable = innodb_log_buffer_size=8M
    innodb_flush_log_at_trx_commit=1
    set-variable = innodb_lock_wait_timeout=50
    #################################################

    J'ai alteré les tables avec les clés étrangeres:

    ALTER TABLE matable1 ADD FOREIGN KEY (champs2) REFERENCES matable2 ( champ1)

    la requete SQL me retourne que ça a fonctionné mais quand je fais un insert (en faisant expret de violer une contraite) il me fait l'insertion comme si de rien était.

    Si vous avez une idée, je suis réellement preneur.

    merci bcp de vos réponses :-)

  10. #10
    Membre éclairé Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Par défaut j'ai trouvé
    Donc cette ligne doit etre commenté si vous voulez que ça fonctionne sous XAMPP

    #skip-innodb
    # Uncomment the following if you are using InnoDB tables
    innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
    innodb_data_file_path = ibdata1:10M:autoextend

    Ensuite il faut également sous windows (pas testé sous linux) aller ds le répertoire mysql après avoir commenté la ligne en question et lancer le mysql_installservice.bat qui install le service et copie le my.cnf vers %windir% seulement et seulement après avoir fait tt ça vous pouvez voir sous phpmyadmin le fameux moteur InnoDB.
    J'ai eu beau convertir mes tables myISAM vers InnoDB, les FOREIGN KEY ne fonctionnaient pas. En recréant une nouvelle base et des tables ça fonctionnent sans aucun probleme. Je ne me suis pas penché plus sur le problème pas trop le temps en faite.

    J'espere que ça aidera quelques personnes à avancer.

    Séb

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

Discussions similaires

  1. Clé étrangère avec mysql
    Par methodman225 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/12/2007, 11h56
  2. [phpMyAdmin] Clé étrangère sur MySQL
    Par safwa dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 17/08/2007, 16h32
  3. [Oracle] créer une clé étrangère en mysql
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/05/2007, 14h50
  4. création d'une clé étrangère sous mysql
    Par franfr57 dans le forum Outils
    Réponses: 2
    Dernier message: 23/03/2006, 09h24
  5. Clé étrangère sous MySQL
    Par NPortmann dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/02/2004, 13h46

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