3

好的,所以我在 MySQL 中使用索引和外键创建表。我使用 MySQL Workbench 创建表,然后让它对 SQL 创建脚本进行前向工程(我在可视 DB 环境中做得比直接手动写出 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 定义 - 即使我取出索引定义,我也只是在第一个外键约束定义处得到错误。我检查过,外键远程列和本地列是相同的数据类型和大小。

4

1 回答 1

4

“errno 121 表示重复键错误”

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

于 2009-08-21T18:52:34.537 回答