Mysql errno: 150 не может создать таблицу
Я использую mysql work bench для экспорта sql из erd, который я создаю, но когда я пытаюсь импортировать его в mysql, я просто получаю ошибку 150 не могу создать таблицу.
Когда я пытаюсь снять ограничение службы ребенка, его просто работа. но мне нужно сохранить эти ссылки.
И каждая таблица, ссылающаяся на служебную таблицу,также имеет эту ошибку. где я ошибаюсь ?
CREATE TABLE IF NOT EXISTS `service` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(200) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`seq` INT(11) NOT NULL ,
`image` VARCHAR(200) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `service_package` (
`id` INT(11) NOT NULL AUTO_INCREMENT ,
`sc_id` INT(11) NOT NULL ,
`lang` INT(11) NOT NULL ,
`package` VARCHAR(200) CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `service_package_id` (`sc_id` ASC) ,
CONSTRAINT `service_package_id`
FOREIGN KEY (`sc_id` )
REFERENCES `service` (`id` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
2 ответа:
Вы используете
Внешние ключи не работают с механизмом хранения MyIsam.ENGINE = MyISAM
в таблице обслуживания. Вместо этого попробуйте использоватьENGINE = InnoDB
(как в таблицеservice_package
).
Для других, просматривающих этот поток, вот некоторые другие причины, почему это происходит:
1) Родительский столбец должен быть проиндексирован перед созданием внешнего ключа.
2) Родительский столбец должен существовать (кажется простым, но он не говорит вам, что это проблема, он просто говорит Errno 150.
Есть и ряд других причин. Смотрите ссылку ниже для исчерпывающего списка: