Ошибка 1061 (MYSQL Workbench) дубликатов ключей при создании индексов - PullRequest
1 голос
/ 07 марта 2020

Я не могу понять, почему я получаю ошибку 1061 для дубликатов ключей в индексах, когда у меня нет дубликатов. Я посмотрел другие посты stackoverflow, касающиеся подобных вопросов, и у большинства была эта проблема, когда у них было одно и то же имя для нескольких внешних ключей. Тем не менее, это не относится к моему случаю.

В общих словах я создал таблицу, связывающую книги с задачами. Каждый идентификатор книги будет иметь несколько задач, связанных с этой конкретной книгой. Это много-много отношений, т.е. многие книги будут связаны с конкретной задачей c. И конкретная задача c будет связана со многими книгами.

enter image description here

Таким образом, между этими отношениями многие ко многим у меня есть таблица Книги x Задачи, которая действует как посредник. Эта таблица имеет свой собственный первичный ключ и два внешних ключа. Одним из них является идентификатор книги из таблицы книг и идентификатор задачи из таблицы задач. Поэтому они оба являются внешними ключами. Таким образом, я могу связать несколько задач с несколькими книгами, каждая из которых определяется своим уникальным идентификатором в таблице booksxtasks.

Когда я отправляю это инженеру, возникает ошибка.

Выполнение сценария SQL на сервере. ОШИБКА: Ошибка 1061: дубликат имени ключа 'FK Tasks_TaskID_idx' SQL Код: CREATE INDEX `FK Tasks_TaskID_idx` ON` mydb`. BooksxTasks` (`Tasks_Task` (` Tasks_Task) `AS C)

  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);

Я также проверил, чтобы увидеть все имена, данные всем ограничениям во всей базе данных. Там не было повторяющихся имен. Так откуда же эта ошибка с двойным ключом?

1 Ответ

0 голосов
/ 07 марта 2020

Я исправил эту проблему, удалив выделенные строки из кода при дальнейшей разработке. enter image description here

Хотя я исправил ошибку, я не совсем понимаю, почему (форвард инжиниринг) создал эти дополнительные строки «создания индекса» в сценарии sql.

...