Duplicate entry 'x' for key 'PRIMARY'
MySQLで主キーやユニークキーの重複が発生した際のエラー
概要
MySQLで主キー(PRIMARY KEY)またはユニーク制約(UNIQUE)が設定されたカラムに、既に存在する値を挿入しようとした際に発生するエラーです。
エラーメッセージ
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000): Duplicate entry 'user@example.com' for key 'users.email_unique'
原因
- 主キーの重複: 既に存在するIDで挿入しようとしている
- ユニーク制約違反: メールアドレスなどのユニークカラムが重複
- AUTO_INCREMENTの問題: 手動でIDを指定してしまった
- データ移行時: 元データに重複があった
- 並行処理: 同時に同じデータを挿入しようとした
解決策
1. INSERT IGNOREを使用
| |
2. ON DUPLICATE KEY UPDATEを使用
| |
3. REPLACEを使用
| |
4. 挿入前に存在確認
| |
5. AUTO_INCREMENTをリセット
| |
6. Laravelでの対処
| |
7. トランザクションで対処
| |
8. 重複データの調査
| |
PHP/PDOでの例外処理
| |
よくある間違い
- テスト環境でシーダーを何度も実行してIDが重複
- CSVインポート時に重複チェックをしない
- 複合ユニークキーの片方だけを考慮する
関連エラー
参考リンク
MySQL の他のエラー
この記事は役に立ちましたか?