MySQL'deki auto_increment özelliği

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
eseNuri
Üye
Mesajlar: 23
Kayıt: 03 Nis 2007 12:12

MySQL'deki auto_increment özelliği

Mesaj gönderen eseNuri »

Arkadaşlar benim bi sorum daha olacak: MySQL'de bulunan tablomun bir field'ı olan adresim field'ı primary key ve auto_increment özelliğine sahip.


Bu tablodaki bir kaydı sildiğimde adresim field'ının değerini düzenlemek istiyorum. Ancak buna izin verilmiyor. Özellikle tüm kayıtları sildiğimde belli oluyor. Örneğin, 5 kayıt varsa ve bunların hepsi silinirse yeni kayıtta 6 değerini veriyor.

Kod: Tümünü seç

var a:integer;
begin
  for a:=0 to tkitaplar.RecordCount-1 do
    begin
      tkitaplar.Edit;
      tkitaplar.FieldByName('id').AsInteger:=a;
      tkitaplar.Post;
    end;
kodunu yazdığımda

Kod: Tümünü seç

Dublicate entry '1' for key 1
hatası veriyor

Yardımcı olursanız sevinirim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Veri tabanının mantığında silinen kayıtın boş bıraktığı (ID) alanın hiç bir anlamı yok. Düşün ki bu ID ye bağlı detay kayıtlar olan detay tablon var. Bu ID içeriğinde kayma olursa her şey allak bullak olur. Gerçi veri tabanı tasarlarken buna dikkat edilir (foreign key ve cascade olayları). Başlangıç aşamasındaki çoğu kişi bu noktaya takılsa da takılmanın hiç bir anlamı yoktur. Silinen kayıt ID si yerine araya diğer ID li kayıtları üstelik bağlı detay tablodakilerle birlikte sağlıklı bir şekilde kaydırmak çok daha meşakkatli bir iştir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

tabloyu

Kod: Tümünü seç

truncate tablename
şeklinde silersen 1 den başlar.
eseNuri
Üye
Mesajlar: 23
Kayıt: 03 Nis 2007 12:12

Mesaj gönderen eseNuri »

haklısın rsimsek abi detay tablolar da mahvolur o zaman


bu arada tabloyu değil record'u siliyorum
Cevapla