|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 100 ![]() |
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. |
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Ta demande ne serait-elle pas :
Citation:
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 MPUsus magister est optimus |
|
|
|
00
|
|
|
#3 | ||
|
Membre habitué
![]() Inscription : décembre 2006 Messages : 100 ![]() |
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 :
|
||
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 100 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : décembre 2006 Messages : 100 ![]() |
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); ps: si soit + clair dans tes demandes |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 100 ![]() |
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 |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2006 Messages : 100 ![]() |
|
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Seb Inscription : août 2006 Messages : 257 ![]() |
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 :-) |
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Seb Inscription : août 2006 Messages : 257 ![]() |
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com