好的,我正在为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定义,即使我删除了索引定义,我仍然会在第一个外键约束定义处得到错误。我已经检查过,外键远程列和本地列的数据类型和大小是相同的。