好的,所以我在 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 定义 - 即使我取出索引定义,我也只是在第一个外键约束定义处得到错误。我检查过,外键远程列和本地列是相同的数据类型和大小。