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 2

2 ответа:

Вы используете ENGINE = MyISAM в таблице обслуживания. Вместо этого попробуйте использовать ENGINE = InnoDB (как в таблице service_package).

Внешние ключи не работают с механизмом хранения MyIsam.

Для других, просматривающих этот поток, вот некоторые другие причины, почему это происходит:

1) Родительский столбец должен быть проиндексирован перед созданием внешнего ключа.

2) Родительский столбец должен существовать (кажется простым, но он не говорит вам, что это проблема, он просто говорит Errno 150.

Есть и ряд других причин. Смотрите ссылку ниже для исчерпывающего списка:

Ошибки внешнего ключа MySQL и Errno: 150