気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. 人気記事
  2. 431 view

「Duplicate entry ‘1’ for key ‘PRIMARY’」と表示されるとき

「Duplicate entry ‘1’ for key ‘PRIMARY’」エラーは、データベース(テーブル)に入力しようとしたデータの主キー(idフィールドなど)がすでに使われていることを示しています(重複不可のため)。

エラーの再現

現在、idフィールドには1から5までが使われています。

現在のデータ

現在のデータ

idが重複するデータを入力します。以下はデータベース管理ツール「phpMyAdmin」での入力例です。

idが重複するデータを入力

idが重複するデータを入力

実行すると、主キーが重複するというエラーメッセージが表示されます。

「Duplicate entry '1' for key 'PRIMARY'」エラー

「Duplicate entry ‘1’ for key ‘PRIMARY’」エラー

このパターンでエラーメッセージが表示された場合、idフィールドに重複しない値を入力すれば解決です。idフィールドが連番(AUTO_INCREMENT)に設定されている場合、自動で重複しない連番が割り当てられるので、何も入力する必要はありません。

連番には何も入力する必要がない

連番には何も入力する必要がない

データインポートでエラーになる場合

既存テーブルにデータをインポートするときにこのエラーが発生する場合があります。

たとえば、データをインポートするtable1.sqlに次のように記述されていると、既存のテーブルと主キーが重複するので、エラーになります。

INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(1, '高橋一郎', '鳥取県', 60);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(2, '近藤次郎', '青森県', 40);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(3, '山下三郎', '大阪府', 55);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(4, '新田史郎', '沖縄県', 18);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(5, '小川五郎', '埼玉県', 30);
データインポートでエラーになる

データインポートでエラーになる

エラーを回避するにはINSERT文を変更して、明示的に割り当てられている1から5までのidを「NULL」にします。

INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '高橋一郎', '鳥取県', 60);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '近藤次郎', '青森県', 40);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '山下三郎', '大阪府', 55);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '新田史郎', '沖縄県', 18);
INSERT INTO `table1` (`id`, `nam`, `pre`, `ag`) VALUES(NULL, '小川五郎', '埼玉県', 30);

インポートを実行すると、連番が自動で割り当てられてデータが追加され、エラーは発生しません。

連番が自動で割り当てられる

連番が自動で割り当てられる

手作業で1行ずつ修正するのは面倒ですが、エディタの置き換え機能で正規表現を使えば、連番を一括で「NULL」に置き換えることもできます。以下は秀丸エディタで正規表現による置換を行うときの指定例です(3桁までの数値を「NULL」に変更)。

秀丸エディタによる一括置換

秀丸エディタによる一括置換

人気記事の最近記事

  1. 「Notice: Use of undefined constant」と表示されるとき

  2. PHPのエラー・警告・注意の違いとは

  3. 「Duplicate entry ‘1’ for key R…

  4. WordPressテーマの「while (have_posts()) : the_post…

  5. PHPでカレンダーを作成しよう

関連記事

PAGE TOP