problème de clé étrangère en mysql "error 1452"

Bonjour la communauté :006

J’ai un souci avec mysql et je ne vois pas du tout le problème, ainsi je viens ici pour être éclairer de vos lumières svp :slightly_smiling:

J’ai une base de donnée antiquite_stxx avec 3 tables : commande, transaction et propriétaire (c’est un tp de cours). Le chargement de donnée via “load data local …” se passe bien pour transaction et pour proprietaire mais ne passe pas du tout pour la table commande dont voici l’erreur :

mysql> load data local infile ‘/home/yassine/Documents/antiquite/data_cmde’ into table commande;
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (antiquite_stxx.commande, CONSTRAINT commande_ibfk_1 FOREIGN KEY (prop_id) REFERENCES proprietaire (prop_id))

et maintenant je vais vous donner le script de création de table car c’est là qu’il y a un souci mais que je ne vois pas du tout, j’ai quand même cherché sur le net et beaucoup parlent de problème lié aux préfixes, je les ai tous supprimé pour avoir des noms simples mais le problème reste le même. je tiens à rajouter que je charge la table proprietaire en premier, ensuite transaction et enfin commande.

CREATE TABLE IF NOT EXISTS proprietaire (
prop_id VARCHAR(16) not null,
prop_nom VARCHAR(32),
prop_prenom VARCHAR(32),
INDEX index_proprietaire_prop_id (prop_id),
PRIMARY KEY (prop_id)
) engine = INNODB;

CREATE TABLE IF NOT EXISTS transaction (
vendeur_id VARCHAR(16) not null,
acheteur_id VARCHAR(16) not null,
objet VARCHAR(128),
INDEX index_transaction_vendeur_id (vendeur_id),
FOREIGN KEY (vendeur_id) REFERENCES proprietaire (prop_id),
INDEX index_transaction_acheteur_id (acheteur_id),
FOREIGN KEY (acheteur_id) REFERENCES proprietaire (prop_id),
PRIMARY KEY (vendeur_id, acheteur_id, objet)
) engine = INNODB;

CREATE TABLE IF NOT EXISTS commande (
prop_id VARCHAR(16) not null,
objet_recherche VARCHAR(128) not null,
INDEX index_commande_prop_id (prop_id),
FOREIGN KEY (prop_id) REFERENCES proprietaire (prop_id),
PRIMARY KEY (prop_id, objet_recherche)
) engine = INNODB;

Merci de m’accorder de votre temps !

Il s’agit d’une violation de contrainte de clé étrangère, en gros, tu est en train de peupler ta table commande avec une valeur de commande.prop_id qui est différente de proprietaire.prop_id :naughty:

Ceci n’est pas possible puisque les valeurs de commande.prop_id (qui est une clé étrangère) ne sont que des références vers des enregistrement de proprietaire.prop_id, qui donc doivent forcément exister…

La solution, si tu as toutes tes valeurs à insérer, est de remplir la table contenant les clés étrangères APRES la table contenant les valeurs de référence.

Courage :wink: