Сбой внешнего ключа MySQL для той же таблицы с ошибкой 1005, ошибка 150

StackOverflow https://stackoverflow.com/questions/2317947

Вопрос

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 следующим образом:

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

Почему это неправильно?

Это было полезно?

Решение

Ссылка на себя должна быть возможной.Это потому, что "родитель" без знака, а "идентификатор" - нет.Измените столбец идентификатора определений таблицы на

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

и это сработает.

Тот самый ссылка государства о внешних ключах:"Размер и знак целых типов должны быть одинаковыми"

Похоже, это та же проблема, что и описанная здесь

Другие советы

Если вы проверите статус движка InnoDB (SHOW ENGINE InnoDB STATUS), вы получите более полное объяснение:

ПОСЛЕДНЯЯ ОШИБКА ВНЕШНЕГО КЛЮЧА

[...]

Невозможно найти индекс в таблице, на которую ссылаются, где столбцы, на которые ссылаются, появляются в качестве первых столбцов, или типы столбцов в таблице и таблица, на которую ссылаются, не соответствуют ограничению.

Делать id без подписи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top