Ошибка 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 был совершенно счастлив создать.
Но этот …
- Компиляция workbench mysql на Fedora 21
- Не удается подключиться к серверу базы данных (mysql workbench)
- Ошибка внешнего ключа MySQL 1005 errno 150
- Конкатенация строк в MySQL
- SELECT INTO Переменная в MySQL DECLARE вызывает синтаксическую ошибку?
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,
что особенно странно, поскольку в нескольких других определениях таблиц есть идентичный код, и все это прекрасно!
- Как разрешить удаленное подключение к mysql
- Заказать по FIELD в MYSQL
- Не удается подключиться к серверу MySQL на «127.0.0.1» (10061) (2003)
- Код ошибки MySQL: 1175 во время UPDATE в MySQL Workbench
- Код ошибки: 2013. Потерянное соединение с сервером MySQL во время запроса
- Отключить ONLY_FULL_GROUP_BY
- Существует ли соглашение об именах для MySQL?
- MySQL для EXCEL (2010) - пользовательский запрос выбора
Проблема заключается в том, что имя внешнего ключа не может быть таким же, как другой внешний ключ во всей модели.
Представьте себе эту ситуацию
Каталог -> Поставщик
Продукт -> Поставщик
если имя внешнего ключа в таблице Каталог для поставщика является «поставщиком», и вы присвоили одно и то же имя в таблице продуктов, тогда имена внешних ключей будут «сталкиваться».
Вы должны назвать их по-другому ..
Например:
catalog_supplier product_supplier
Кажется, вы создаете индекс для столбцов внешнего ключа. При создании внешнего ключа в InnoDb каждый будет создан автоматически.
Смотрите эту тему .
Попробуйте использовать INSERT IGNORE
вместо INSERT
где INSERT IGNORE не будет вставлять новую строку, если найден дубликат первичного ключа. Это должно помочь решить проблему временно, но я бы рекомендовал обрезать таблицу.