好了,所以我创建MySQL中使用索引和外键的表。我使用MySQL Workbench中创建的表,然后把它正向工程一个SQL创建脚本,(我在视觉DB环境优于只是写出来,用手SQL代码的时候了)。

问题是很多时候我导入SQL脚本到MySQL,我得到了经典eror:

#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;

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

有帮助吗?

解决方案

“错误号121指的是重复键错误”

约束必须在数据库中唯一的名字,你可能想改变你的FK名称。像这样,FK_groupMembers_groupFK_groupMembers_user

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top