好的,所以我在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定义 - 即使我取出索引定义,我只是在第一个外键约束定义中得到错误。我已经检查过,外键远程列和本地列的数据类型和大小相同。
答案 0 :(得分:4)
“errno 121表示重复键错误”
约束必须在数据库中具有唯一的名称,您可能想要更改您的FK名称。像这样,FK_groupMembers_group
和FK_groupMembers_user
。