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?

Était-ce utile?

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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top