MySQL clé étrangère à la même table échoué avec l'erreur 1005, numéro 150
-
22-09-2019 - |
Question
mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id);
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150)
DDL comme suit:
Create Table: CREATE TABLE `category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`parent` bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `parent_idx` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Pourquoi est-ce mal?
La solution
autoréférence devrait être possible. C'est parce que « parent » est non signé et « id » est pas. Modifier la colonne des définitions de table id
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
et il fonctionne.
Le États au sujet clés étrangères: « la taille et le signe de types entiers doit être le même »
semble être le même problème décrit ici
Autres conseils
Si vous vérifiez l'état du moteur InnoDB (de SHOW ENGINE InnoDB STATUS
), vous obtiendrez une explication plus complète:
dernière erreur FOREIGN KEY
[...]
Vous ne trouvez pas un index dans la table référencée où les colonnes référencées apparaissent comme les premières colonnes, ou les types de colonnes dans la table et la table référencée ne correspondent pas à la contrainte.
Faire id
non signé.