Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Installation
Installation Forum d'entraide sur les problèmes liés à l'installation de MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/02/2007, 22h43   #1
Nouveau Membre du Club
 
Avatar de yasmine*
 
Inscription : décembre 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 100
Points : 31
Points : 31
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.
yasmine* est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 11h23   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Ta demande ne serait-elle pas :
Citation:
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...
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 11h58   #3
Membre habitué
 
Avatar de Sifo-Dyas
 
Inscription : 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
Points : 112
Points : 112
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 :
1
2
ALTER TABLE maTable ADD PRIMARY KEY (champ1, champ2);
CREATE INDEX pk_maTable ON maTable (champ1, champ2);
Sifo-Dyas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 18h57   #4
Nouveau Membre du Club
 
Avatar de yasmine*
 
Inscription : décembre 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 100
Points : 31
Points : 31
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
yasmine* est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 19h28   #5
Membre habitué
 
Avatar de Sifo-Dyas
 
Inscription : 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
Points : 112
Points : 112
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 :
ALTER TABLE table1 ADD FOREIGN KEY (col1) REFRENCES table2 (col2);
doit marcher.

ps: si soit + clair dans tes demandes
Sifo-Dyas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 20h30   #6
Nouveau Membre du Club
 
Avatar de yasmine*
 
Inscription : décembre 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 100
Points : 31
Points : 31
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
yasmine* est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 09h59   #7
Membre habitué
 
Avatar de Sifo-Dyas
 
Inscription : 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
Points : 112
Points : 112
Regarde ici

à 1ère vu, on peut faire un
Code :
ALTER TABLE maTable TYPE=InnoDB;
Pour créer tes futurs tables pense à préciser le type :
Code :
CREATE TABLE maFuturTable (...) TYPE=InnoDB;
Sifo-Dyas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2007, 13h37   #8
Nouveau Membre du Club
 
Avatar de yasmine*
 
Inscription : décembre 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 100
Points : 31
Points : 31
merci merci
yasmine* est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2007, 16h20   #9
Membre actif
 
Avatar de turican2
 
Seb
Inscription : août 2006
Messages : 257
Détails du profil
Informations personnelles :
Nom : Seb
Âge : 33
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : août 2006
Messages : 257
Points : 168
Points : 168
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 :-)
turican2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 11h15   #10
Membre actif
 
Avatar de turican2
 
Seb
Inscription : août 2006
Messages : 257
Détails du profil
Informations personnelles :
Nom : Seb
Âge : 33
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : août 2006
Messages : 257
Points : 168
Points : 168
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
turican2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h02.


 
 
 
 
Partenaires

Hébergement Web