Ошибка MySQL 1022 при создании таблицы

MySQL Workbench разработал следующий SQL для создания таблицы:

CREATE TABLE IF NOT EXISTS `mydb`.`errors_reports` ( `error_id` INT NOT NULL , `report_short` VARCHAR(15) NOT NULL , PRIMARY KEY (`error_id`, `report_short`) , INDEX `error_id_idx` (`error_id` ASC) , INDEX `report_short_idx` (`report_short` ASC) , CONSTRAINT `error_id` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `report_short` FOREIGN KEY (`report_short` ) REFERENCES `mydb`.`reports` (`report_short` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB 

который выглядит хорошо для меня, и в моей базе данных есть куча других очень похожих таблиц, которые MySQL был совершенно счастлив создать.

Но этот …

 ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports' 

Я не могу, чтобы в жизни меня видели здесь дублирующие ключи. Определен только один ключ!

Я запускаю MySQL 5.6 со свежей установкой по умолчанию. В журнале ошибок ничего нет.

Идеи?

Редактирование: посредством процесса устранения (возвращаясь к самому простому определению таблицы, а затем постепенно добавляя бит обратно) проблема выглядит так:

 CONSTRAINT `error_id` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, 

что особенно странно, поскольку в нескольких других определениях таблиц есть идентичный код, и все это прекрасно!

Проблема заключается в том, что имя внешнего ключа не может быть таким же, как другой внешний ключ во всей модели.

Представьте себе эту ситуацию

Каталог -> Поставщик

Продукт -> Поставщик

если имя внешнего ключа в таблице Каталог для поставщика является «поставщиком», и вы присвоили одно и то же имя в таблице продуктов, тогда имена внешних ключей будут «сталкиваться».

Вы должны назвать их по-другому ..

Например:

catalog_supplier product_supplier

Кажется, вы создаете индекс для столбцов внешнего ключа. При создании внешнего ключа в InnoDb каждый будет создан автоматически.

Смотрите эту тему .

Попробуйте использовать INSERT IGNORE вместо INSERT где INSERT IGNORE не будет вставлять новую строку, если найден дубликат первичного ключа. Это должно помочь решить проблему временно, но я бы рекомендовал обрезать таблицу.

Давайте будем гением компьютера.