好的,所以我要在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定义-即使当我取出索引定义时,我也只会在第一个外键约束定义上得到错误.我已经检查过了,外键远程列和本地列是相同的数据类型和大小.
解决方法:
“ errno 121表示重复的密钥错误”
约束在数据库中必须具有唯一的名称,您可能想更改FK名称.这样,FK_groupMembers_group和FK_groupMembers_user.
标签:mysql-error-1005,database-design,mysql
来源: https://codeday.me/bug/20191107/2003106.html