MySQL 5.1.59 выдает ошибку с этой таблицей create:
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)
Что случилось с этой таблицей create?
Если MySQL сообщает номер ошибки 1005 из инструкции CREATE TABLE, и сообщение об ошибке относится к ошибке 150, неудача создания таблицы потому что ограничение внешнего ключа не было правильно сформировано.
В нем также говорится, что ссылки на внешние ключи для одной и той же таблицы разрешены:
InnoDB поддерживает ссылки на внешние ключи в таблице. В этих случаях, "записи дочерних таблиц" действительно ссылаются на зависимые записи в пределах та же таблица.
Отношения, которые я хочу, - это неидентифицирующий родитель-ребенок, представляющий иерархию жанров и поджанров. Жанр не должен иметь родителя, поэтому parent_id может быть нулевым.
Может быть, что MySQLWorkbench установил следующее:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';