Сбой внешнего ключа MySQL для той же таблицы с ошибкой 1005, ошибка 150
-
22-09-2019 - |
Вопрос
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
без подписи.