ホームページ >データベース >mysql チュートリアル >テーブルを変更すると、「MySQL エラー 1062: キー 'PRIMARY' のエントリ '0' が重複しています」が発生するのはなぜですか?

テーブルを変更すると、「MySQL エラー 1062: キー 'PRIMARY' のエントリ '0' が重複しています」が発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-01 00:42:10844ブラウズ

Why am I getting MySQL Error 1062: Duplicate entry '0' for key 'PRIMARY' when altering my table?

MySQL エラー 1062: 主キーの重複 '0'

momento_distribution テーブルの変更中に問題が発生し、エラー " 1062 - キー 'PRIMARY' のエントリ '0' が重複しています。これは、テーブル内のデータに問題があることを示している可能性があります。

元のテーブル構造で定義されている主キーは、momento_id 列と momento_idmember 列の組み合わせでした。ただし、新しい ID 列を追加して主キーとして設定した後、この列で重複、特に値 '0' が見つかりました。

この問題を解決するには、ID 列を指定してみてください。以下に示すように、テーブル定義の自動インクリメントとして:

CREATE TABLE `momento_distribution`
  (
     `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,
     `id`               INT(11) NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (`id`),  -- New primary key
     KEY `momento_distribution_FI_2` (`momento_idmember`),
     KEY `accepted` (`accepted`, `ext_member`)
  )
ENGINE=InnoDB
DEFAULT CHARSET=latin1;

または、すでに id 列を作成している場合は、自動インクリメントするように変更できます。次のクエリを使用します:

ALTER TABLE `momento_distribution`
  CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT,
  DROP PRIMARY KEY,
  ADD PRIMARY KEY (`id`);  -- New primary key

id 列を自動インクリメントとして指定すると、各行がこの列に対して一意の値を持つことが保証され、重複する「0」の問題が排除されます。これにより、データを失うことなくテーブル構造を変更し、id 列を主キーとして割り当てることができます。

以上がテーブルを変更すると、「MySQL エラー 1062: キー 'PRIMARY' のエントリ '0' が重複しています」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。