Mysql errno: 150 Невозможно создать таблицу - PullRequest
2 голосов
/ 04 марта 2012

Я использую рабочий стол mysql для экспорта 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 ]

5 голосов
/ 04 марта 2012

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

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

0 голосов
/ 13 июня 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...