Ответ 1
Скорее всего, у вас уже есть ограничение с именем iduser
или idcategory
в вашей базе данных. Просто переименуйте ограничения, если это так.
Я получаю ошибку 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'
Скорее всего, у вас уже есть ограничение с именем iduser
или idcategory
в вашей базе данных. Просто переименуйте ограничения, если это так.
Измените имя внешнего ключа в MySQL. Вы не можете иметь одинаковые имена внешних ключей в таблицах базы данных.
Проверьте все ваши таблицы и все внешние ключи и избегайте наличия двух внешних ключей с тем же самым точным именем.
Из двух ссылок Успешно разрешено и "Соглашение об именах" , Я легко решил ту же проблему, с которой столкнулся. то есть для имени внешнего ключа, введите fk_colName_TableName. Это соглашение об именах не является двусмысленным, а также делает каждый ForeignKey в вашей модели DB уникальным, и вы никогда не получите эту ошибку.
Ошибка 1022: невозможно записать; дублирующий ключ в таблице
Это также может возникнуть в связи с ошибкой в некоторых версиях инструмента преобразования онлайн-схем Percona Toolkit. Чтобы мутировать большую таблицу, pt-osc сначала создает дубликатную таблицу и копирует все записи в нее. В некоторых случаях некоторые версии pt-osc 2.2.x будут пытаться предоставить ограничениям для новой таблицы те же имена, что и ограничения старой таблицы.
Исправление было выпущено в версии 2.3.0.
Подробнее см. https://bugs.launchpad.net/percona-toolkit/+bug/1498128.
Я также столкнулся с этой проблемой. Проверьте, существует ли имя базы данных в Mysql и переименовывает старый.
Я провел последние 4 часа с той же проблемой. Я просто хотел убедиться, что ограничения имеют уникальные имена.
Вы можете переименовать ограничения. Я добавил номер к моему, чтобы я мог легко отслеживать количество вхождений.
Пример
Если ограничение в таблице называется boy с внешним ключом X Следующее ограничение с внешним ключом X можно назвать boy1
Я уверен, что ты получишь лучшие имена, чем я. 🙂