Bonjour,
Je rencontre un souci. J'ai des difficultés avec la création de clés étrangères. J'ai créé une bdd elevage et dans cette BDD, j'ai créé premièrement une table Animal contenant les colonnes suivantes : Espèce, Sexe, Date de naissance, Commentaires, Nom (les colonnes ne sont pas forcément dans cet ordre dans ma bdd). Et ensuite, j'ai créé une table Espece contenant les champs suivants:
Puis j'ai voulu écrire la commande suivante, qui devait permettre de relier Animal et Espece (afin de faire correspondre à un animal son espèce):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE Espece ( id SMALLINT UNSIGNED AUTO_INCREMENT, nom_courant VARCHAR(40) NOT NULL, nom_latin VARCHAR(40) NOT NULL UNIQUE, description TEXT, PRIMARY KEY(id) ) ENGINE=InnoDB;
Mais la création d'un index multi-colonnes (nom,espece_id)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 -- Ajout d'une colonne espece_id ALTER TABLE Animal ADD COLUMN espece_id SMALLINT UNSIGNED; -- même type que la colonne id de Espece -- Remplissage de espece_id UPDATE Animal SET espece_id = 1 WHERE espece = 'chien'; UPDATE Animal SET espece_id = 2 WHERE espece = 'chat'; UPDATE Animal SET espece_id = 3 WHERE espece = 'tortue'; UPDATE Animal SET espece_id = 4 WHERE espece = 'perroquet'; -- Suppression de la colonne espece (supprimer cettte colonne qui ne servait plus à rien pour mes travaux) ALTER TABLE Animal DROP COLUMN espece; -- Ajout de la clé étrangère ALTER TABLE Animal ADD CONSTRAINT fk_espece_id FOREIGN KEY (espece_id) REFERENCES Espece(id);
m'a renvoyé l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ALTER TABLE Animal MODIFY espece_id SMALLINT UNSIGNED NOT NULL; CREATE UNIQUE INDEX ind_uni_nom_espece_id ON Animal (nom, espece_id);
Duplicate entry 'Anya_1' for key uni_ind_nom_espece_id, je sais que cela signifie que j'ai des doublons mais je ne comprends pas pourquoi, j'ai suivi à la lettre le tuto.
J'ai vraiment besoin d'aide, merci pour vos réponses qui m'aideraient à débloquer la situation.
Merci d'avance
Partager