3
好吧,所以我在MySQL中创建索引和外键的表。我使用MySQL Workbench来创建表格,然后让它正向工程设计一个SQL创建脚本(在可视化DB环境中,我的工作比刚刚用手写出SQL代码更好)。MySQL创建表索引错误
的问题是很多时候我导入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;
错误通常来自于第一索引定义 - 甚至当我拿出索引定义,我只是在第一个外键约束定义得到的错误。我检查过了,外键远程列和本地列是相同的数据类型和大小。
谢谢 - 我改变了我的所有外键,索引名称,并修复了错误。这是否也适用于索引名称,还是仅限于表格特定? – 2009-08-24 15:17:42
是的,每个实体(索引,表等)在整个数据库中都应该是唯一的)。 – Fabian 2009-08-24 16:16:17