ホームページ > データベース > mysql チュートリアル > MySQL エラー 1062: データを失わずに重複した主キー エントリを修正するには?

MySQL エラー 1062: データを失わずに重複した主キー エントリを修正するには?

Susan Sarandon
リリース: 2025-01-03 21:51:40
オリジナル
717 人が閲覧しました

MySQL Error 1062: How to Fix Duplicate Primary Key Entries Without Data Loss?

MySQL 1062 エラー: 主キーの重複エントリ、データを失わずに解決するにはどうすればよいですか?

問題:

の場合既存のデータとリレーションシップを使用して MySQL テーブルの主キーを変更しようとすると、エラーが発生します。発生した:

1062 - Duplicate entry '0' for key 'PRIMARY'
ログイン後にコピー

この問題は、主キーとして新しく追加された列に重複した値 (0) が含まれており、一意性制約に違反しているために発生します。

根本原因:

このエラーは通常、変更される列を主キーとして参照する外部キー関係を持つ既存のデータがある場合に発生します。主キーの値が一意でない場合、データベースは変更を拒否します。

解決策 (データ損失なし):

データを損失せずにこの問題を解決するには、次の手順に従うことができます:

  1. 主キーを次のように設定します自動インクリメント:

    テーブル定義で、新しい主キー列を自動インクリメントとして指定します:

    `momento_id` INT(11) NOT NULL AUTO_INCREMENT,
    ログイン後にコピー

    これにより、新しい主キーの一意の値が自動的に生成されます。

  2. 古いプライマリーを削除キー:

    既存の主キー制約の削除:

    ALTER TABLE `momento_distribution` DROP PRIMARY KEY;
    ログイン後にコピー
  3. 新しい主キーの追加:

    自動インクリメントに新しい主キー制約を追加します。列:

    ALTER TABLE `momento_distribution` ADD PRIMARY KEY (`momento_id`);
    ログイン後にコピー

これにより、既存のデータに影響を与えることなく、自動生成された値が一意の主キーとして割り当てられます。

代替アプローチ:

「momento_id」列を 0 から開始する必要がない場合は、代替手段を検討できます。アプローチ:

  1. 新しい自動インクリメント列の作成:

    自動インクリメントを有効にして新しい列を追加します:

    ALTER TABLE `momento_distribution` ADD `new_id` INT(11) NOT NULL AUTO_INCREMENT;
    ログイン後にコピー
  2. 既存の更新データ:

    既存の行を更新して新しい列を設定します:

    UPDATE `momento_distribution` SET `new_id` = `momento_id`;
    ログイン後にコピー
  3. 古い主キーを削除し、新しい主キーを追加します:

    古い主キーを削除し、自動インクリメントに新しい主キーを追加します列:

    ALTER TABLE `momento_distribution`
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`new_id`);
    ログイン後にコピー

このアプローチでは、すべての行に一意の自動インクリメント値を割り当て、主キー制約が確実に満たされるようにします。

以上がMySQL エラー 1062: データを失わずに重複した主キー エントリを修正するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート