Ошибка 1022 - Не удается записать; дублирующий ключ в таблице

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

SQL query:

-- -----------------------------------------------------
-- Table `apptwo`.`usercircle`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS  `apptwo`.`usercircle` (

 `idUserCircle` MEDIUMINT NOT NULL ,
 `userId` MEDIUMINT NULL ,
 `circleId` MEDIUMINT NULL ,
 `authUser` BINARY NULL ,
 `authOwner` BINARY NULL ,
 `startDate` DATETIME NULL ,
 `endDate` DATETIME NULL ,
PRIMARY KEY (  `idUserCircle` ) ,
INDEX  `iduser_idx` (  `userId` ASC ) ,
INDEX  `idcategory_idx` (  `circleId` ASC ) ,
CONSTRAINT  `iduser` FOREIGN KEY (  `userId` ) REFERENCES  `apptwo`.`user` (
`idUser`
) ON DELETE NO ACTION ON UPDATE NO ACTION ,
CONSTRAINT  `idcategory` FOREIGN KEY (  `circleId` ) REFERENCES  `apptwo`.`circle` (
`idCircle`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = INNODB;

MySQL said: Documentation

#1022 - Can't write; duplicate key in table 'usercircle' 

Ответ 1

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

Ответ 2

Измените имя внешнего ключа в MySQL. Вы не можете иметь одинаковые имена внешних ключей в таблицах базы данных.

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

Ответ 3

Из двух ссылок Успешно разрешено и "Соглашение об именах" , Я легко решил ту же проблему, с которой столкнулся. то есть для имени внешнего ключа, введите fk_colName_TableName. Это соглашение об именах не является двусмысленным, а также делает каждый ForeignKey в вашей модели DB уникальным, и вы никогда не получите эту ошибку.

Ошибка 1022: невозможно записать; дублирующий ключ в таблице

Ответ 4

Это также может возникнуть в связи с ошибкой в ​​некоторых версиях инструмента преобразования онлайн-схем Percona Toolkit. Чтобы мутировать большую таблицу, pt-osc сначала создает дубликатную таблицу и копирует все записи в нее. В некоторых случаях некоторые версии pt-osc 2.2.x будут пытаться предоставить ограничениям для новой таблицы те же имена, что и ограничения старой таблицы.

Исправление было выпущено в версии 2.3.0.

Подробнее см. https://bugs.launchpad.net/percona-toolkit/+bug/1498128.

Ответ 5

Я также столкнулся с этой проблемой. Проверьте, существует ли имя базы данных в Mysql и переименовывает старый.

Ответ 6

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

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

Пример

Если ограничение в таблице называется boy с внешним ключом X Следующее ограничение с внешним ключом X можно назвать boy1

Я уверен, что ты получишь лучшие имена, чем я. 🙂