La contrainte de clé étrangère est formée de manière incorrecte?
J'ai eu ce errore lors de la création de la table: contrainte de clé Étrangère est mal formée???
{create table comment(
Comment_ID int UNSIGNED AUTO_INCREMENT not null,
User_1 varchar(50) not null,
Note_ID int(11) UNSIGNED not null,
PRIMARY key(Comment_ID),
CONSTRAINT `fk_1` FOREIGN KEY (`User_1`) REFERENCES `user` (`Dev_ID`),
CONSTRAINT `fk_2` FOREIGN KEY (`User_2`) REFERENCES `user` (`Dev_ID`),
CONSTRAINT `fk_3` FOREIGN KEY (`Note_ID`) REFERENCES `note`(`Note_ID`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
}
c'est ok quand j'enlève fk_3
mon tableau
{
CREATE TABLE `note` (
`Dev_ID` varchar(50) NOT NULL,
`Note_ID` int(11) UNSIGNED NOT NULL,
`Title` varchar(200) NOT NULL,
`Time` datetime NOT NULL,
`Mood` int(11) NOT NULL,
`Body` varchar(3000) NOT NULL,
`Visible` tinyint(1) NOT NULL DEFAULT '1',
`Share` tinyint(1) NOT NULL DEFAULT '0',
`Update` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`Dev_ID`,`Note_ID`),
CONSTRAINT `fk_note_user` FOREIGN KEY (`Dev_ID`) REFERENCES `user` (`Dev_ID`) ON UPDATE CASCADE
) ENGINE=MyISAM DEFAULT CHARSET=utf8
}
Merci pour l'aide!
source d'informationauteur user1235872
Vous devez vous connecter pour publier un commentaire.
C'est parce que la clé primaire de la
notes
table est(Dev_ID,Note_ID)
mais vous êtes seulement en faisant référence à une de ces colonnes (Note_ID
) dans votre contrainte.Un FK contrainte doit toujours se composent de tous les PK colonnes.
Assurez-vous également que les deux tables innoDB.
En plus les réponses qui leur ont été donnés, vous aussi, vous obtenez cette erreur si les champs ne correspondent pas. Par exemple, si vous avez essayé de créer une contrainte de clé étrangère entre un
varchar
champ et unint
champ.Un plus plus: les jeux de caractères des champs doivent correspondre.
Dans la table référencée j'avais ascii comme un jeu de caractères par défaut:
DEFAULT CHARSET=ascii
a été rapporté parshow create table
. J'ai essayé de créer la table de référence avecDEFAULT CHARSET=utf
et j'ai eu la "contrainte de clé Étrangère est mal formé".Après j'ai changé de ce
DEFAULT CHARSET=ascii
sur la table (le référencement), il a été créé avec succès.Ce problème se produit parce que la colonne
Est ni primaire, ni unique.
Il suffit de faire
Et il va fonctionner.