問題:
の場合既存のデータとリレーションシップを使用して MySQL テーブルの主キーを変更しようとすると、エラーが発生します。発生した:
1062 - Duplicate entry '0' for key 'PRIMARY'
この問題は、主キーとして新しく追加された列に重複した値 (0) が含まれており、一意性制約に違反しているために発生します。
根本原因:
このエラーは通常、変更される列を主キーとして参照する外部キー関係を持つ既存のデータがある場合に発生します。主キーの値が一意でない場合、データベースは変更を拒否します。
解決策 (データ損失なし):
データを損失せずにこの問題を解決するには、次の手順に従うことができます:
主キーを次のように設定します自動インクリメント:
テーブル定義で、新しい主キー列を自動インクリメントとして指定します:
`momento_id` INT(11) NOT NULL AUTO_INCREMENT,
これにより、新しい主キーの一意の値が自動的に生成されます。
古いプライマリーを削除キー:
既存の主キー制約の削除:
ALTER TABLE `momento_distribution` DROP PRIMARY KEY;
新しい主キーの追加:
自動インクリメントに新しい主キー制約を追加します。列:
ALTER TABLE `momento_distribution` ADD PRIMARY KEY (`momento_id`);
これにより、既存のデータに影響を与えることなく、自動生成された値が一意の主キーとして割り当てられます。
代替アプローチ:
「momento_id」列を 0 から開始する必要がない場合は、代替手段を検討できます。アプローチ:
新しい自動インクリメント列の作成:
自動インクリメントを有効にして新しい列を追加します:
ALTER TABLE `momento_distribution` ADD `new_id` INT(11) NOT NULL AUTO_INCREMENT;
既存の更新データ:
既存の行を更新して新しい列を設定します:
UPDATE `momento_distribution` SET `new_id` = `momento_id`;
古い主キーを削除し、新しい主キーを追加します:
古い主キーを削除し、自動インクリメントに新しい主キーを追加します列:
ALTER TABLE `momento_distribution` DROP PRIMARY KEY, ADD PRIMARY KEY (`new_id`);
このアプローチでは、すべての行に一意の自動インクリメント値を割り当て、主キー制約が確実に満たされるようにします。
以上がMySQL エラー 1062: データを失わずに重複した主キー エントリを修正するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。