Delphi Can
Mysql #23000Duplicate entry hatası - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Veri Tabanı (https://www.delphican.com/forumdisplay.php?fid=4)
+--- Forum: MySQL (https://www.delphican.com/forumdisplay.php?fid=14)
+--- Konu Başlığı: Mysql #23000Duplicate entry hatası (/showthread.php?tid=1232)



Mysql #23000Duplicate entry hatası - masteryoda - 04-08-2017

Merhaba
4 farklı mysql veritabanında product_option isimli tablo var bu tablolara insert v.s ederken hiç bir sıkıntı olmuyordu dün 4 veritabanı içinde
#23000Duplicate entry '350637' for key 'PRIMARY' şeklinde hatalar vermeye başladı 2 veritabanında sorunu autoinc değerini bir artırarak halletim örnek autoinc alan 15700 iken 15701 yaptım fakat geri kalan 2 veritabanında product_option tablosunda hata devam etti tabloyu drop edip yeniden create ettim değişmedi tüm tabloları onar dedim değişmedi.
kod tarafında max id yi alıp bir artırmakta istemiyorum bu tip bir sorunla karşılaşan oldumu

 
EkleSql:='';
EkleSql:=EkleSql+'INSERT INTO '+tablooneki+'product_option (`product_option_id`, `product_id`, `option_id`, `option_value`, `required`)';

EkleSql:=EkleSql+'  VALUES   ';
EkleSql:=EkleSql+'(:product_option_id,:product_id,:option_id,:option_value,:required) ';

qry_ekleme.Close;
qry_ekleme.SQL.Text:=EkleSql;
qry_ekleme.ParamByName('product_id').Text:=ProductId;
buradaki product_option_id alanı autoinc olarak tanımlı bu kod 2 veritabanında sorunsuz çalışırken 2 tanesinde #23000Duplicate entry '350637' for key 'PRIMARY' hatasını veriyor.


Mysql #23000Duplicate entry hatası - CaglarCoskun - 04-08-2017

MYSQL elektrik kesintisinde primary ID hata verebiliyor. Tekerrür eden ID değiştir düzelir.


Cvp: Mysql #23000Duplicate entry hatası - masteryoda - 04-08-2017

(04-08-2017, Saat: 14:51)CaglarCoskun Adlı Kullanıcıdan Alıntı: MYSQL elektrik kesintisinde primary ID hata verebiliyor. Tekerrür eden ID değiştir düzelir.

tekerrür eden id yok autoinc düzgün çalışmıyor tabloyu truncate ile temizlediğimde tüm kayıtlar siliniyor ve autoinc değeri 1 oluyor ama programdan o tabloya veri aktarırken autoinc alan 147 değeri alıyor daha sonra ikinci bir kayıt eklerken tekrar 147 değeri alıyor.


Mysql #23000Duplicate entry hatası - meko - 04-08-2017

Merhaba,

MySQL için konuşayım.
tabloyu truncate ettikten sonra autoinc 1 ile başlar,
ama tabloya kayıt eklerken autoinc sahasına müdahele edip değer ataması yapınca diyelim 100 atadınız.
MySQL, tablo için autoinc değerini atadığınız değerden başlatır. autoinc değeri 2 değil 101 olur.


Cvp: Mysql #23000Duplicate entry hatası - masteryoda - 04-08-2017

(04-08-2017, Saat: 16:14)meko Adlı Kullanıcıdan Alıntı: Merhaba,

MySQL için konuşayım.
tabloyu truncate ettikten sonra autoinc 1 ile başlar,
ama tabloya kayıt eklerken autoinc sahasına müdahele edip değer ataması yapınca diyelim 100 atadınız.
MySQL, tablo için autoinc değerini atadığınız değerden başlatır. autoinc değeri 2 değil 101 olur.

autoinc alana kendim bir değer atmıyorum kendisi zaten artırıyor normalde ama bu iki veritabanında böyle bir sorun oldu mysql i yeniden başlatım tablo truncate drop create denedim değişmedi bir şey.


Mysql #23000Duplicate entry hatası - CaglarCoskun - 04-08-2017

MYISAM kullanıyorsanız repair table komutunu kullanın. Çakışan ID numarasınıda değiştirin


Mysql #23000Duplicate entry hatası - meko - 04-08-2017

tabloya veriyi nasıl aktarıyorsunuz?


Mysql #23000Duplicate entry hatası - uparlayan - 04-08-2017

Merhaba,

Belli ki ID çakışması yaşıyorsun; 4 farklı mysql veritabanında aynı (product_option) isimli birer tablo olduğunu söyledin ve bunları tek bir tabloda birleştirmek istediğini belirtiyorsun, doğru mu anladım?

Eğer durum böyle ise ID çakışmasından kurtulmanın bir ylu yok, çünkü zaman içinde zaten 4 veritabanında da paralel bir şekilde ID'ler oluşacaktır. Ben olsam bu durumda verileri topladığım tabloya 3 alan daha eklerdim;

1) KaynakDB    --> Bu senin hangi veritabanından veriyi çektiğini gösterir
3) KaynakTablo --> Bu hangi tablodan buraya veri aktardığını gösterir.
2) KaynakID    --> Bu hangi ID'yi bu tabloya aktardığını gösterir

Bu noktadan sonra da ID çakışmasını önlemek için PRIMARY KEY alanına dokunmaz, insert işlemini doğal akışına bırakırdım ( YANİ verileri topladığım tablonun PRIMARY KEY ALANINA MANUEL BİR ŞEKİLDE ID YAZMAZDIM...)


Cvp: Mysql #23000Duplicate entry hatası - masteryoda - 04-08-2017

(04-08-2017, Saat: 20:21)uparlayan Adlı Kullanıcıdan Alıntı: Merhaba,

Belli ki ID çakışması yaşıyorsun; 4 farklı mysql veritabanında aynı (product_option) isimli birer tablo olduğunu söyledin ve bunları tek bir tabloda birleştirmek istediğini belirtiyorsun, doğru mu anladım?

Eğer durum böyle ise ID çakışmasından kurtulmanın bir ylu yok, çünkü zaman içinde zaten 4 veritabanında da paralel bir şekilde ID'ler oluşacaktır. Ben olsam bu durumda verileri topladığım tabloya 3 alan daha eklerdim;

1) KaynakDB    --> Bu senin hangi veritabanından veriyi çektiğini gösterir
3) KaynakTablo --> Bu hangi tablodan buraya veri aktardığını gösterir.
2) KaynakID    --> Bu hangi ID'yi bu tabloya aktardığını gösterir

Bu noktadan sonra da ID çakışmasını önlemek için PRIMARY KEY alanına dokunmaz, insert işlemini doğal akışına bırakırdım ( YANİ verileri topladığım tablonun PRIMARY KEY ALANINA MANUEL BİR ŞEKİLDE ID YAZMAZDIM...)
Tek tabloda birleştirme işlemi yapmıyorum

sorunum delphi tarafında değil uzun zamandır dokunmadığım kodlar ve gayet iyi çalışıyordu veritabanına bi haller oldu tam bilmiyorum ama sunucu aniden yeniden başlamış olabilir veya mysql servera bi haller oldu nolduysa bu tabloda autoinc alanda sorun yaşıyorum tabloyu drop etim yeniden create ettim düzelmedi sunucuda siteler çalıştığı için geç saatlerde sunucuyu yeniden başlatmayı deneyeceğim.


Myisam kullanıyorum repair denedim düzelmedi.