カテゴリー:
エラー
閲覧数:207 配信日:2020-05-05 11:20
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;
→ 無事解決した