MeWrite Docs

Duplicate entry for key

一意制約に違反するデータを挿入しようとした場合に発生するエラー

概要

Duplicate entryは、UNIQUE制約やPRIMARY KEY制約に違反するデータを挿入または更新しようとした場合に発生します。

エラーメッセージ

ERROR 1062 (23000): Duplicate entry 'john@example.com' for key 'users.email'

原因

  1. 重複データの挿入: 既に存在する値を挿入しようとした
  2. 一括インポート時の重複: CSVなどのデータに重複がある
  3. 並行処理での競合: 同時に同じデータを挿入

解決策

1. INSERT IGNOREで重複を無視

1
2
INSERT IGNORE INTO users (email, name)
VALUES ('john@example.com', 'John');

2. ON DUPLICATE KEY UPDATEで更新

1
2
3
INSERT INTO users (email, name)
VALUES ('john@example.com', 'John')
ON DUPLICATE KEY UPDATE name = VALUES(name);

3. REPLACEで置換(注意:DELETEしてINSERT)

1
2
REPLACE INTO users (email, name)
VALUES ('john@example.com', 'John');

4. 事前に存在確認

1
2
3
4
5
INSERT INTO users (email, name)
SELECT 'john@example.com', 'John'
WHERE NOT EXISTS (
    SELECT 1 FROM users WHERE email = 'john@example.com'
);

5. アプリケーション側でハンドリング

1
2
3
4
5
6
7
8
9
try:
    cursor.execute("INSERT INTO users (email, name) VALUES (%s, %s)",
                   (email, name))
except mysql.connector.IntegrityError as e:
    if e.errno == 1062:
        # 重複エラーの処理
        pass
    else:
        raise

MySQL の他のエラー

最終更新: 2025-12-09