Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils 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/04/2006, 11h43   #1
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Par défaut ajout clé étrangère problème syntaxe

Bonjour, je vous assure que j'ai fait le tour de tous les tutos, faq, forums possibles, mais j'ai le problème suivant : lorque je désire ardemment ajouter une clé étrangère via la commande suivante :

ALTER TABLE affcommune
ADD CONSTRAINT typeAffDansListe
FOREIGN KEY FKtypeAff (INDtypeAff)
REFERENCES typeAff (PRIMARY)
ON DELETE NO ACTION
ON UPDATE NO ACTION

mysql, via phpmyadmin, m'envoie, si je puis m'exprimer ainsi, proprement chier. Le gars dans l'ordinateur voit une erreur de syntaxe.
Qui veux bien éclairer le ciel obscur de mon ignorance ?
Je précise que j'utilise Innodb (normalement, mais comment le vérifier pour en être certain ? je sais juste que skip-innodb est commenté dans mysql.ini)
philippe281281 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 12h46   #2
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Bonjour,

Voici une adresse qui donnera surement l'explication :
http://dev.mysql.com/doc/refman/5.0/...nstraints.html

On peut notamment voir que la clause REFERENCES est mal remplie
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 13h23   #3
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Merci de ta réponse Adjanakis. Malheureusement je dois être un puit de bêtise sans fond parce que je ne vois pas où est l'erreur dans references ?? typeAff est bien une table et PRIMARY est bien le nom de sa clé primaire, alors quid ??
philippe281281 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 13h40   #4
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
Citation:
PRIMARY est bien le nom de sa clé primaire
T'es en train de dire qu'une des colonnes se nomme PRIMARY ?
__________________
"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 11/04/2006, 13h42   #5
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Merci de ta réponse. Non, c'est son nom d'index. La colonne s'appelle 'libelle'. D'après ce que j'ai compris de la syntaxe, c'est le nom d'index qu'il faut préciser, non ?
philippe281281 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 13h46   #6
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Juste au cas où, est-ce que le problème pourrait venir du fait que ma colonne référencé en tant que clé étrangère dans la table fille n'a pas encore de valeurs ? (j'essaie toutes les hypothèses!)
philippe281281 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 14h02   #7
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
Citation:
c'est le nom d'index qu'il faut préciser, non ?


Citation:
Envoyé par Aide MySQL
Un exemle :

CREATE TABLE parent(id INT NOT NULL,
PRIMARY KEY (id)
) TYPE=INNODB;
CREATE TABLE child(id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) TYPE=INNODB;
C'est la colonne qu'on référence...

En plus, si la colonne référencée ne fait pas l'objet d'un index, il faut en créer un : cf http://www.developpez.net/forums/viewtopic.php?t=481922
__________________
"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 11/04/2006, 14h20   #8
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Ok, ça marche, merci beaucoup ! Effectivement il faut mettre les noms de colonne et ne pas se fier à la syntaxe officielle suivante :

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...)

qui est quand même trompeuse ! Pour moi index_col_name ça veut dire nom de l'index de colonne, merde !!!!

philippe281281 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 19h06.


 
 
 
 
Partenaires

Hébergement Web