【发布时间】:2020-06-20 01:59:08
【问题描述】:
我不明白为什么当我没有任何重复项时,索引上的键重复项总是出现 1061 错误。我查看了有关类似问题的其他 stackoverflow 帖子,并且大多数人在多个外键具有相同名称时遇到了这个问题。但是,这不适用于我的情况。
概括地说,我所做的就是创建一个表格,将书籍与任务联系起来。 每个书籍 ID 都会有一些与该特定书籍相关的任务。 这是一种多多关系,即许多书籍将与特定任务相关联。一个特定的任务将与许多书籍相关联。
因此,在这种多对多关系之间,我有一个 Books x Tasks 表作为中介。该表有自己的主键和两个外键。一个是 books 表中的 book ID 和 tasks 表中的 tasks id。因此它们都是外键。这样,我可以将多个任务与多本书联系起来,每本书都由它在 booksxtasks 表中的唯一 ID 定义。
当我对此进行转发工程时,出现了错误。
在服务器中执行 SQL 脚本 错误:错误 1061:重复的键名“FK Tasks_TaskID_idx” SQL 代码:CREATE INDEX `FK Tasks_TaskID_idx` ON `mydb`.`BooksxTasks` (`Tasks_TaskID` ASC)
CREATE TABLE IF NOT EXISTS `mydb`.`BooksxTasks` (
`BooksxTasksID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`Books_BookID` INT UNSIGNED NOT NULL,
`Tasks_TaskID` TINYINT(2) UNSIGNED NOT NULL,
PRIMARY KEY (`BooksxTasksID`),
CONSTRAINT `FK Tasks_TaskID`
FOREIGN KEY (`Tasks_TaskID`)
REFERENCES `mydb`.`Tasks` (`TaskID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `FK Books_BooksID`
FOREIGN KEY (`Books_BookID`)
REFERENCES `mydb`.`Books` (`BookID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE INDEX `FK Tasks_TaskID_idx` ON `mydb`.`BooksxTasks` (`Tasks_TaskID` ASC);
CREATE INDEX `FK Books_BooksID_idx` ON `mydb`.`BooksxTasks` (`Books_BookID` ASC);
我还检查了整个数据库中所有约束的所有名称。没有重复的名字。那么这个重复键错误是从哪里来的呢?
【问题讨论】:
-
您不需要为具有外键的列创建索引,MySQL 会自动完成。
-
我自己没有创建索引,Workbench 在我创建外键时自动创建了索引....然后它给出了一个错误,指出该索引上有重复,然后它不允许我要删除索引,因为上面有一个外键。错误是索引“FK Tasks_TaskID_idx”属于外键“FK Tasks_TaskID”必须删除外键才能删除索引。
-
SHOW KEYS FROM mydb.BooksxTasks的结果是什么? -
键名是: PRIMARY, FK Tasks_TaskID_idx, FK Books_BooksID_idx 列名是:分别为 BooksxTasksID、Tasks_TasksID、Books_Book ID。