Внешний ключ MySQL к той же таблице перестал работать с ошибкой 1005, errno 150

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

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

9
задан John Carter 22 November 2011 в 17:36
поделиться

2 ответа

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

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

и все заработает.

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

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

11
ответ дан 3 November 2019 в 00:01
поделиться

Если вы проверите состояние механизма InnoDB ( ПОКАЗАТЬ СОСТОЯНИЕ InnoDB ), вы получите более полное объяснение:

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

{{ 1}}

[...]

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

Сделать id беззнаковым.

1
ответ дан 3 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: