MySQL错误1005:无法创建表。关于使用外键作为多列主键

时间:2013-01-02 00:43:59

标签: mysql

我有一个多对多的表格user_processes,其中包含两列:userprocessuser是引用用户表主键的外键。 process列是引用进程主键的外键。但是,我user_processes中不需要单独的主键列,因为userprocess上的多列主键应该足够了(对吗?我没有看到需要对于单独的id列)。一个用户可以有许多进程,但不应该有多个行,同一个用户具有相同的进程。

以下代码在phpmyadmin中给出了错误“#1005 - 无法创建表'test.user_processes'(错误号:150)(详细信息...)”。

这是由mysql workbench生成的代码:

-- -----------------------------------------------------
-- Table `test`.`user_processes`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `test`.`user_processes` (
  `user` INT UNSIGNED NOT NULL ,
  `process` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`user`, `process`) ,
  INDEX `fk_user_processes_users1_idx` (`user` ASC) ,
  INDEX `fk_user_processes_processes1_idx` (`process` ASC) ,
  CONSTRAINT `fk_user_processes_users1`
    FOREIGN KEY (`user` )
    REFERENCES `test`.`users` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_user_processes_processes1`
    FOREIGN KEY (`process` )
    REFERENCES `test`.`processes` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

知道为什么不让我这样做,以及正确的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

users和/或processes可能不存在。确保在调用它之前执行引用表的create table语句。

或引用字段users.id和/或processes.id的类型与字段user_processes.user / user_processes.process的类型不匹配。在这种情况下,这些字段也应为INT UNSIGNED