SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry

エラー

目次一覧

 状態:-  閲覧数:2,821  投稿日:2020-05-05  更新日:2020-05-05  
問題発生 / ハマった点 / indexを確認

SHOW INDEX FROM user; / 原因判明 / エラー対応


問題発生 / ハマった点 / indexを確認

 閲覧数:690 投稿日:2020-05-05 更新日:2020-05-05 

問題発生


エラーメッセージ
( ! ) Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'user_name_index' in /var/www/xxxx.php on line xxxx

ハマった点


Duplicate entry
entryテーブルに問題が発生しているのかと勘違いしてしまった
→「Duplicate entry」は定型文

indexを確認


indexを確認するコマンド
SHOW INDEX FROM テーブル名;


SHOW INDEX FROM user; / 原因判明 / エラー対応

 閲覧数:206 投稿日:2020-05-05 更新日:2020-05-05 

SHOW INDEX FROM user;


一覧表抜粋
Table Non_unique key_name Seq_in_index Column_name
user 0 PRIMARY 1 id
user 0 user_name_index 1 site_id
user 0 email 1 email
user 0 tw_user_id 1 tw_user_id
user 1 prefecture_code 1 prefecture_code

原因判明


要件変更のため、カラム追加したのに、インデックスが従来のままだっため
必ずしも「一意である必要がなくなったカラム」に対して、相変わらず「一意であるインデックス」を貼ったままだったから

従来
「site_id」「email」カラムには一意な値を必ず格納していた

今後
・「site_id」「email」カラムは使用しない
・デフォルトでは''を挿入するよう変更(一意ではなくなった)

今回の原因
・インデックスで一意指定している「site_id」カラムに対して、既存レコードと同じ値''を格納しようとしたため

エラー対応


一意ではなくなった「site_id」カラムに対して、相変わらずインデックス指定している「user_name_index」インデックスを削除する
ALTER TABLE user DROP INDEX user_name_index;


新たなエラーメッセージが表示された
( ! ) Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'email' in /var/www/xxxx.php on line xxxx

一意ではなくなった「email」カラムに対して、相変わらずインデックス指定している「emai」インデックスへ対しても、上記と同様に削除する
ALTER TABLE user DROP INDEX email;


→ 無事解決した


( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value

where clause is ambiguous

コメント投稿(ログインが必要)