目次一覧
状態:-
閲覧数:2,821
投稿日:2020-05-05
更新日:2020-05-05
問題発生 / ハマった点 / indexを確認
SHOW INDEX FROM user; / 原因判明 / エラー対応
SHOW INDEX FROM user; / 原因判明 / エラー対応
問題発生 / ハマった点 / indexを確認
問題発生
エラーメッセージ
( ! ) 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; / 原因判明 / エラー対応
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 | 1 | ||
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;
→ 無事解決した