我使用mysql工作台从我创建的erd导出sql,但是当我尝试将其导入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;
答案 0 :(得分:5)
您在服务表上使用ENGINE = MyISAM
。请尝试使用ENGINE = InnoDB
(就像在service_package
表上一样)。
外键不适用于MyIsam存储引擎。
答案 1 :(得分:0)
对于观看此主题的其他人,以下是其他原因:
1)在创建外键之前,必须将父列编入索引。
2)父列需要存在(看起来很简单,但它没有告诉你这是问题,它只是说Errno 150。
还有许多其他原因。请参阅以下链接以获取详尽的清单: