dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/mysql-1062-duplicate-entry-unique-key
MySQL
MySQL 8.0 - 8.4Veri & Kısıtlamalar
3 dk okuma
ERROR 1062 (23000): Duplicate entry 'test@example.com' for key 'users.email_UNIQUE'

MySQL Benzersiz İndeks İhlali: Eşzamanlılık Yarışı (Race Condition), ETL Duplikasyonu ve Çözüm Desenleri

Uygulama katmanı race condition ve mükerrer batch kayıtları sonucu oluşan 1062 hatasının tespiti, INSERT IGNORE ve ON DUPLICATE KEY UPDATE desenleri.

İnceleyen:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: MySQL 8.0 / 8.4 LTS / 9.0

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 2 Kasım 2026
Test Edilen SürümlerMySQL 8.0.36, 8.4.1 LTS
Gerekli YetkiSELECT, INSERT, UPDATE on target table
Risk Seviyesi
MediumON DUPLICATE KEY UPDATE sırasında AUTO_INCREMENT değerleri hızla tüketilebilir ve INT sınırına dayanabilir
Beklenen ÇıktıMükerrer satırın tespiti ve idempotent INSERT komutunun başarıyla 1 row affected dönmesi
Geri Dönüş (Rollback) Planı:Hatalı eklenen mükerrer kaydı silme veya eski haline getirme
MySQL Docs: INSERT ... ON DUPLICATE KEY UPDATE
İlk 60 Saniye Teşhis Protokolü:

Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.

▸Belirti

Kullanıcı kaydı veya veri yükleme sırasında işlem kesilir ve şu hata döner:

plaintext
ERROR 1062 (23000): Duplicate entry 'test@example.com' for key 'users.email_UNIQUE'

▸Sahada Ne Görürsün?

Kullanıcı formu kaydederken çift tıkladığında veya iki pod aynı anda aynı kaydı oluşturmaya çalıştığında biri başarılı olurken diğeri HTTP 500 döner.


▸Kök Neden Matrisi

OlasılıkKök NedenAçıklama
%60Eşzamanlı İstek Yarışı (Race Condition)Uygulama önce SELECT yapıp kayıt olmadığını görüp INSERT eder; iki istek araya girdiğinde ikinci INSERT patlar.
%30ETL / Batch TekrarıTekrar çalışan veri aktarım scripti mevcut kayıtları ezmek yerine doğrudan eklemeye çalışır.
%10Büyük/Küçük Harf (Collation) Duyarsızlığıutf8mb4_0900_ai_ci collation altında Test@example.com ile test@example.com aynı kabul edilir.

▸ACİL RUNBOOK (0-5dk)

sql
-- 1. Çakışan kaydı bul SELECT id, email, created_at FROM users WHERE email = 'test@example.com'; -- 2. Tablodaki tüm mükerrer kayıtları listele SELECT email, count(*) AS c FROM users GROUP BY email HAVING c > 1; -- 3. Acil idempotent düzeltme: INSERT IGNORE veya ON DUPLICATE KEY UPDATE INSERT INTO users (email, full_name, updated_at) VALUES ('test@example.com', 'Test User', NOW()) ON DUPLICATE KEY UPDATE full_name = VALUES(full_name), updated_at = NOW();

▸KALICI BLUEPRINT

  1. 1Check-Then-Act Antipattern'ını Bırakın: Uygulamada SELECT COUNT(*) yapıp ardından INSERT etmek yerine doğrudan veritabanının unique constraint'ine güvenin ve ON DUPLICATE KEY UPDATE kullanın.
  2. 2BIGINT Kullanımı: Sık duplicate denemelerinde AUTO_INCREMENT id hızla büyüyebileceği için birincil anahtarlar BIGINT UNSIGNED yapılmalıdır.

▸Doğrulama

sql
SHOW INDEX FROM users WHERE Key_name = 'email_UNIQUE';

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (82)