MySQL chiave esterna allo stesso tavolo con l'errore 1005, errno 150
-
22-09-2019 - |
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?
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.