MySQL テーブルを変更して主キーを変更すると、エラー コード 1062: 「エントリが重複しています」が発生する可能性があります。 '0' for key 'PRIMARY'.」 これは、新しく指定された主キー列に重複が含まれている場合に発生します。 value.
原因:
この問題は、既存のテーブル データの主キーに変換される列に重複した値が含まれている可能性があるために発生します。 PRIMARY KEY 制約により、列内のすべての値が一意であることが保証されます。 PRIMARY KEY 制約を追加するとき、MySQL は重複をチェックし、重複が存在する場合は失敗します。
解決策:
データ損失を回避してエラーに対処するには、次の手順に従います。
1.新しい主キー列に自動インクリメントを追加します:
新しい主キー列に AUTO_INCREMENT プロパティがあることを確認します:
CREATE TABLE `momento_distribution` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `momento_id` INT(11) NOT NULL, `momento_idmember` INT(11) NOT NULL, `created_at` DATETIME DEFAULT NULL, `updated_at` DATETIME DEFAULT NULL, `unread` TINYINT(1) DEFAULT '1', `accepted` VARCHAR(10) NOT NULL DEFAULT 'pending', `ext_member` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`, `momento_idmember`), KEY `momento_distribution_FI_2` (`momento_idmember`), KEY `accepted` (`accepted`, `ext_member`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
AUTO_INCREMENT プロパティを割り当てることで、MySQL は自動的に新しい主キー列の一意の値を使用して、潜在的な可能性を回避します。重複します。
2.既存の列を変更します:
AUTO_INCREMENT プロパティを使用せずに新しい主キー列をすでに作成している場合は、次のクエリを使用して変更できます。
ALTER TABLE `momento_distribution` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT, DROP PRIMARY KEY, ADD PRIMARY KEY (`id`);
このクエリは、既存の ID 列を AUTO_INCREMENT プロパティを持つように変更し、古い主キー制約を削除し、変更された ID に新しい主キー制約を追加します。コラム
以上がMySQL エラー 1062: 新しい主キーの重複エントリが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。