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.
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.
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...
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);
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
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 :
doit marcher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALTER TABLE table1 ADD FOREIGN KEY (col1) REFRENCES table2 (col2);
ps: si soit + clair dans tes demandes
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
Regarde ici
à 1ère vu, on peut faire un
Pour créer tes futurs tables pense à préciser le type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALTER TABLE maTable TYPE=InnoDB;
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE TABLE maFuturTable (...) TYPE=InnoDB;
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 :-)
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
Partager