MySQL创建索引错误的表

时间:2009-08-20 15:47:24

标签: mysql database-design mysql-error-1005

好的,所以我在MySQL中使用索引和外键创建表。我使用MySQL Workbench来创建表,然后让它设计一个SQL创建脚本(我在可视化数据库环境中做得更好,而不仅仅是手工编写SQL代码)。

当我将sql脚本导入mysql时,问题很多次,我得到了经典的错误:

#1005 - Can't create table 'db.tablename' (errno: 121) 

我每次都设法解决问题,通常是索引/外键相关,但现在我开始厌倦每次必须修复它。我真的不明白问题是什么(特别是当MySQL产品为自己的数据库创建sql代码时)。下面是一些通常会导致问题的代码。

CREATE  TABLE IF NOT EXISTS `db`.`groupMembers` (
  `groupMembersID` INT NOT NULL AUTO_INCREMENT ,
  `groupID` INT NOT NULL ,
  `userID` INT NULL ,
  PRIMARY KEY (`groupMembersID`) ,
  INDEX `group` (`groupID` ASC) ,
  INDEX `user` (`userID` ASC) ,
  CONSTRAINT `group`
    FOREIGN KEY (`groupID` )
    REFERENCES `db`.`groups` (`groupsID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `user`
    FOREIGN KEY (`userID` )
    REFERENCES `db`.`users` (`usersID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

错误通常来自第一个INDEX定义 - 即使我取出索引定义,我只是在第一个外键约束定义中得到错误。我已经检查过,外键远程列和本地列的数据类型和大小相同。

1 个答案:

答案 0 :(得分:4)

“errno 121表示重复键错误”

约束必须在数据库中具有唯一的名称,您可能想要更改您的FK名称。像这样,FK_groupMembers_groupFK_groupMembers_user