243

create table コマンドで重複キーに関する 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' 
4

9 に答える 9

597

ほとんどの場合、名前iduserまたはidcategoryデータベースに既に制約があります。その場合は、制約の名前を変更してください。

制約は、作成/変更している特定のテーブルだけでなく、データベース全体で一意である必要があります。

制約が現在使用されている場所を見つけるには、次のクエリを使用できます。

SELECT `TABLE_SCHEMA`, `TABLE_NAME`
FROM `information_schema`.`KEY_COLUMN_USAGE`
WHERE `CONSTRAINT_NAME` IN ('iduser', 'idcategory');
于 2013-08-05T11:54:22.883 に答える
32

MySQL で外部キー名を変更します。データベース テーブルで同じ外部キー名を持つことはできません。

すべてのテーブルとすべての外部キーを確認し、まったく同じ名前の 2 つの外部キーがないようにしてください。

于 2014-12-19T20:47:41.720 に答える
15

Resolved SuccessfullyNaming Conventionの 2 つのリンクから、直面した同じ問題を簡単に解決できました。つまり、外部キー名はfk _colName_ TableNameとして指定します。この命名規則はあいまいではなく、DB モデル内のすべての ForeignKey を一意にするため、このエラーが発生することはありません。

エラー 1022: 書き込めません。テーブルの重複キー

于 2015-04-28T06:09:00.870 に答える
1

私もその問題に遭遇しました。データベース名がMysqlに既に存在するかどうかを確認し、古いものの名前を変更します。

于 2014-12-11T02:36:59.413 に答える