Duplicate entry '<değer>' for key '<indeks>'
Bir script zaten var olan bir şeyi kaydetmeye çalıştı — genelde bir oyuncunun iki kez eklenmesi.
Önce şunu yap
Her katılımda oluyorsa, script önce kontrol etmeden ekliyordur. Yazarına bildir.
Ne anlama gelir
Bir INSERT, bir UNIQUE ya da PRIMARY anahtarın zaten tuttuğu bir değeri yazmaya çalıştı. MySQL ifadenin tamamını reddetti. Mesaj hem değeri hem çakıştığı indeksi adlandırır, ki bu ikisi birlikte satırı tanımlar.
Neden olur
Ne sıklıkla doğru cevap olduğuna göre sıralı.
- 1
Zaten var olan bir oyuncuyu eklemek
Koşulsuz ekleyen bir
playerConnectingya da ilk katılım işleyicisi. İkinci katılım, aynı tanımlayıcı, çakışma. - 2
Bir işleyici iki kez kaydedilmiş
Aynı olay iki dosyada bağlanmış, ya da bir kaynak işleyicisi temizlenmeden yeniden başlatılmış, yani her işlem iki kez çalışıyor.
- 3
Aslında başarılı olan bir zaman aşımından sonra yeniden deneme
İlk ekleme çalıştı ve yanıt kayboldu; yeniden deneme çakışır.
- 4
Tek veritabanında iki sunucu
Kimlik bilgilerini paylaşan bir geliştirme kutusu ile bir canlı kutu.
- 5
İstemci tarafında üretilen bir kimlik
İstemcinin birincil anahtar olarak sağladığı her şey er geç tekrar eder.
Hangisinin seninki olduğu nasıl anlaşılır
Zaten orada olan satırı bul:
SELECT * FROM users WHERE identifier = 'mesajdaki-deger';
Meşru, mevcut bir oyuncu gibi görünüyorsa, insert hiç çalışmamalıydı. Saniyeler önce oluşturulmuş bir satırın kopyasıysa, iki kez ekliyorsun demektir.
Nereye bakmalı
Kaynaktaki INSERT, ve önce varlık kontrolü yapan bir şey olup olmadığı.
Nasıl düzeltilir
Hata vermesine izin vermek yerine, bir çakışmada ne olacağını söyle:
-- mevcut satırı koru, hiçbir şey yapma INSERT IGNORE INTO users (identifier, name) VALUES (?, ?) -- ya da güncelle INSERT INTO users (identifier, name) VALUES (?, ?) ON DUPLICATE KEY UPDATE name = VALUES(name)
Hâlâ kendi kodunda mı takıldın?
Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.
bug_reportServer Fixer'ı açBu tür bir hata için Script Optimizer buna yol açan sorgu kalıplarını yakalar.