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.Сообщение об ошибке:
ОШИБКА 1005 (HY000) в строке __: Невозможно создать таблицу 'mydb.genre' (номер ошибки: 150)
Что не так сэто создать таблицу?
В руководстве написано :
Если MySQL сообщает об ошибке 1005 из оператора CREATE TABLE, и сообщение об ошибке ссылается на ошибку 150, создание таблицы не удалось, поскольку ограничение внешнего ключа было сформировано неправильно.
Также говорится, что ссылки на внешние ключи на одну и ту же таблицу разрешены:
InnoDB поддерживает внешний ключссылки в таблице.В этих случаях «записи дочерней таблицы» действительно относятся к зависимым записям в одной и той же таблице.
Требуемая связь - это неидентифицирующий родительский-дочерний элемент, представляющий иерархию жанров и поджанров.,Жанр не обязательно должен иметь родителя, поэтому parent_id имеет значение null.
Возможно, 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';