Chave estrangeira do MySQL para a mesma tabela falhou com o erro 1005, errno 150
-
22-09-2019 - |
Pergunta
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 da seguinte maneira:
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
Por que está errado?
Solução
A auto -referência deve ser possível. É porque "pai" não é assinado e "id" não é. Alterar a coluna ID de definições de tabela para
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
E vai funcionar.
o referência Estados sobre chaves estrangeiras: "O tamanho e o sinal de tipos inteiros devem ser os mesmos"
Parece ser o mesmo problema descrito aqui
Outras dicas
Se você verificar o status do mecanismo innodb (SHOW ENGINE InnoDB STATUS
), você terá uma explicação mais completa:
Mais recente erro de chave estrangeira
[...]
Não é possível encontrar um índice na tabela referenciada em que as colunas referenciadas apareçam como as primeiras colunas ou os tipos de colunas na tabela e a tabela referenciada não correspondem à restrição.
Faço id
não assinado.