Mysql错误:150无法创建表

时间:2012-03-03 21:10:31

标签: mysql mysql-error-1064

我使用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;

2 个答案:

答案 0 :(得分:5)

您在服务表上使用ENGINE = MyISAM。请尝试使用ENGINE = InnoDB(就像在service_package表上一样)。

外键不适用于MyIsam存储引擎。

答案 1 :(得分:0)

对于观看此主题的其他人,以下是其他原因:

1)在创建外键之前,必须将父列编入索引。

2)父列需要存在(看起来很简单,但它没有告诉你这是问题,它只是说Errno 150。

还有许多其他原因。请参阅以下链接以获取详尽的清单:

MySQL Foreign Key Errors and Errno: 150