Comment ajouter une Clé Étrangère (MySQL)
Je suis très nouveau à SQL et je suis en train de réaliser un système simple de l'instruction ALTER TABLE pour créer une nouvelle colonne et l'utiliser comme une clé étrangère pour faire référence à une simple table dans ma base de données. J'ai modifié les deux tables InnoDB
Cependant, lors de l'exécution de l'instruction ALTER TABLE de code, j'obtiens l'erreur suivante:
Error 1452 Cannot add or update a child row:
a foreign key constraint fails (`toys`.<result 2 when
explaining filename '#sql-6d4_6'>, CONSTRAINT
`#sql-6d4_6_ibfk_1` FOREIGN KEY (`toy_id`) REFERENCES `toys` (`toy_id`))
Ci-dessous sont les DESC de deux tables:
Tableau 1:
FIELD TYPE NULL KEY EXTRA
toy_id int(11) NO PRI auto_increment
toy varchar(50) YES
Tableau 2:
FIELD TYPE NULL KEY EXTRA
boy_id int(11) NO PRI auto_increment
boy varchar(50) YES
Et c'est l'ALTER requête j'étais en train de réaliser:
ALTER TABLE boys
ADD COLUMN toy_id INT NOT NULL,
ADD CONSTRAINT toys_toy_id_fk
FOREIGN KEY(toy_id)
REFERENCES toys(toy_id);
J'ai regardé partout en essayant de le comprendre, mais avec pas de chance. Merci d'avance, et merci d'être aimable à ce newbie 🙂
EDIT:
Voici le SHOW CREATE TABLE pour les deux tableaux:
TABLEAU 1:
CREATE TABLE `toys` (
`toy_id` int(11) NOT NULL AUTO_INCREMENT,
`toy` varchar(50) DEFAULT NULL,
PRIMARY KEY (`toy_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
TABLEAU 2:
CREATE TABLE `boys` (
`boy_id` int(11) NOT NULL AUTO_INCREMENT,
`boy` varchar(50) DEFAULT NULL,
PRIMARY KEY (`boy_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
- Supprimer le dernier
ADD
:... ADD CONSTRAINT toys_toy_id_fk FOREIGN KEY(toy_id) ...
- J'ai essayé de l'enlever AJOUTER la CONTRAINTE, et de laisser d'AJOUTER une CLÉ ÉTRANGÈRE, ainsi que de quitter AJOUTER la CONTRAINTE et de retrait "AJOUTER" avant de CLÉ ÉTRANGÈRE, mais recevez le même message d'erreur.
- Vous pouvez poster à la sortie de
SHOW CREATE TABLE toys
et deSHOW CREATE TABLE boys
? - Absolument -- je viens de mettre à jour le post pour y inclure la
SHOW CREATE TABLE
pour chaque table
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas ajouter une colonne not NULL à une table qui a plus de lignes nulles, lorsque la colonne est limitée à des valeurs qui correspondent à celles de la table parent, et encore a uniquement des valeurs NULLES parce que c'est un nouveau, vide de la colonne sans DÉFAUT.
La solution de contournement est de le faire par étapes: ajout de la colonne, mais ne pas déclarer qu'il n'est PAS NULL, et de ne pas déclarer la clé étrangère encore.
Puis le remplir avec des données valides qui correspond à une certaine valeur(s) dans votre jouets de table.
Ensuite modifier la colonne ne soit PAS NULL, et de créer de la contrainte:
auto_increment = 6
.