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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top