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';