Что не так с ограничением внешнего ключа в этой таблице?

MySQL 5.1.59 выдает ошибку при создании таблицы:

CREATE  TABLE IF NOT EXISTS `genre` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `abv` CHAR(3) CHARACTER SET 'latin1' COLLATE 'latin1_bin' NULL DEFAULT NULL ,
  `name` VARCHAR(80) NOT NULL DEFAULT '' ,
  `parent_id` INT NULL DEFAULT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_genre_genre1` (`parent_id` ASC) ,
  CONSTRAINT `fk_genre_genre1`
    FOREIGN KEY (`parent_id` )
    REFERENCES `genre` (`id` )
    ON DELETE SET NULL
    ON UPDATE CASCADE)
ENGINE = InnoDB;

которая была сгенерирована MySQLWorkbench 5.2.33. Сообщение об ошибке:

ERROR 1005 (HY000) at line __: Can't create table 'mydb.genre' (errno: 150)

Что не так с этой таблицей?

В руководстве сказано:

Если MySQL сообщает об ошибке номер 1005 от оператора CREATE TABLE, и сообщение об ошибке ссылается на ошибку 150, создание таблицы не удалось потому что ограничение внешнего ключа было неправильно сформировано.

Также говорится, что ссылки на внешний ключ в одной и той же таблице разрешены:

InnoDB поддерживает ссылки на внешний ключ внутри таблицы. В этих случаях, "записи дочерних таблиц" на самом деле относятся к зависимым записям внутри одной таблицы.

Отношения, которые мне нужны, - это неидентифицирующие отношения "родитель-ребенок" для представления иерархии жанров и поджанров. Жанр не обязательно должен иметь родителя, поэтому parent_id является nullable.

Возможно, имеет значение, что MySQLWorkbench установил следующее:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

12
задан pnuts 4 January 2019 в 00:15
поделиться