Domanda

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 come segue:

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

Perché è sbagliato?

È stato utile?

Soluzione

Auto di riferimento dovrebbe essere possibile. È perché "padre" non è firmato e "id" non è. Modificare la colonna definizioni tabella ID di

 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

e funzionerà.

Il Uniti circa chiavi esterne: "la dimensione e il segno di tipi interi deve essere lo stesso"

Sembra essere lo stesso problema descritto qui

Altri suggerimenti

Se si controlla lo stato del motore InnoDB (SHOW ENGINE InnoDB STATUS), si otterrà una spiegazione più completa:

  

ULTIME FOREIGN KEY ERROR

     

[...]

     

Non riesco a trovare un indice nella tabella di riferimento in cui le colonne di riferimento appaiono come le prime colonne, o tipi di colonna nella tabella e la tabella di riferimento non corrispondono per costrizione.

Fai id senza segno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top