MySQL clé étrangère SUR DELETE SET NULL vérifiez les types de données d'erreur
Je suis en train de travailler sur une base de données normalisée, pour être sûr, j'ai voulu utiliser des clés étrangères.
Ma base de données:
CREATE TABLE `names` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(250) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name_id` (`name_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
La commande:
ALTER TABLE `names` ADD FOREIGN KEY ( `name` ) REFERENCES `temp`.`users` (
`name_id`
) ON DELETE SET NULL ON UPDATE CASCADE ;
La réponse (erreur):
Erreur lors de la création de la clé étrangère sur le nom (vérifiez les types de données)
Alors, comment résoudre ce problème?
- Peut-être vous devriez également créer vos colonnes AUTO_INCREMENT unsigned vous n'avez pas les nombres négatifs et name_id si vous n'avez pas besoin d'une valeur négative là.
Vous devez vous connecter pour publier un commentaire.
L'erreur est auto-explicatif.
Name
dansnames
table est de typevarchar(250)
alors quename_id
dansusers
table est de typeint(11)
.Mais je crois que vous avez fait pour avoir un FK tout le chemin autour de
users
table de référencementnames
table.Ici est SQLFiddle démo
Les deux clés doivent être du même type et de même longueur,vous avez varchar et int.
Ici est ce que vous voulez:
names
.id
etusers
.name_id
?