Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

MySQL AUTO_INCREMENT nedir?​


MySQL’de AUTO_INCREMENT, bir tabloya yeni kayıt eklendiğinde sayısal bir sütun için sonraki değeri otomatik üreten özelliktir. En yaygın kullanım, her satırı benzersiz biçimde tanımlayan birincil anahtar sütunudur. Böylece her INSERT işleminde kimlik numarasını elle hesaplamanız veya yazmanız gerekmez.

Nasıl çalışır?​


Özellik genellikle INT veya BIGINT türündeki bir PRIMARY KEY sütununda kullanılır. Sütunu INSERT komutunda belirtmezseniz MySQL uygun sonraki değeri üretir.

Aşağıdaki örneği seçili bir test veritabanında ve aynı bağlantıda çalıştırın. Yeni, çakışmayan bir geçici tablo adı kullanır; aynı ad zaten varsa mevcut tabloyu silmek yerine örnek adını değiştirin. Kalıcı uygulama tablolarına kayıt eklemez.

Kod:
CREATE TEMPORARY TABLE demo_auto_increment (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    username VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

INSERT INTO demo_auto_increment (username) VALUES ('ayse');
INSERT INTO demo_auto_increment (username) VALUES ('mehmet');

SELECT id, username FROM demo_auto_increment ORDER BY id;

Yeni örnek tabloda, otomatik artış adımı ve başlangıç ofseti varsayılan 1 ise ilk iki satırın ID’si 1 ve 2 olur. Özel sunucu ayarları veya önceden kullanılan gerçek tablolarda bu varsayımı kurmayın. Geçici tablo yalnız aynı oturumda görünür ve bağlantı kapanınca kaldırılır.

Yeni kaydın ID değerini alma​


Uygulamanızın eklenen kaydın kimliğine ihtiyacı varsa, ekleme işleminden sonra aynı veritabanı bağlantısı üzerinde LAST_INSERT_ID() değerini okuyabilirsiniz:

Kod:
INSERT INTO demo_auto_increment (username) VALUES ('zeynep');
SELECT LAST_INSERT_ID();

Tek satırlık bu eklemenin otomatik ID’si aynı bağlantıdan okunur. Çok satırlı INSERT için LAST_INSERT_ID() ilk otomatik üretilen değeri verir; son satırın ID’si varsayılmamalıdır. Başka bir bağlantı üzerinden sorgulamak veya tabloyu tekrar sorgulayıp en büyük ID’yi almak güvenilir bir yöntem değildir; aynı anda başka kayıtlar eklenebilir.

Önemli davranışlar ve kararlar​


AUTO_INCREMENT değerleri aralıksız sıra numarası değildir. Bir kayıt silinirse veya ekleme işlemi başarısız olup geri alınırsa oluşan boş değer genellikle yeniden kullanılmaz. Bu nedenle bu sütunu fatura numarası, sıra numarası veya eksiksiz kayıt sayacı gibi yorumlamayın.

Tablo tasarlarken ID’nin olası büyüklüğünü dikkate alın. Küçük tablolar için INT yeterli olabilir; çok büyük veri kümelerinde BIGINT daha geniş bir aralık sağlar. Tablolar arası ilişkilerde bu sütuna başvuran yabancı anahtarların türü ve işareti uyumlu seçilmelidir.

Aşağıdaki kararlar pratikte en sık karşılaşılan durumları ayırır:

İhtiyaçUygun yaklaşımDikkat edilmesi gereken
Satırları verimli biçimde ayırt etmekAUTO_INCREMENT birincil anahtarDeğerlerin kesintisiz olması beklenmemeli
Kullanıcıya görünen, tahmin edilmesi zor kimlikUUID veya ayrı bir genel kimlik alanıAUTO_INCREMENT tek başına gizlilik sağlamaz
İçe aktarmada mevcut ID’leri korumakID değerini INSERT içinde açıkça vermekÇakışan birincil anahtar değerleri ekleme hatasına yol açar

Uygulamada kontrol listesi​


  1. Kimlik sütununu NOT NULL AUTO_INCREMENT olarak tanımlayın ve çoğu durumda PRIMARY KEY yapın.
  2. Yeni kayıt eklerken ID sütununu listeye almayın; diğer zorunlu sütunları gönderin.
  3. İşlem sonrasında gereken ID’yi aynı bağlantı üzerinden LAST_INSERT_ID() ile alın.
  4. Silme, geri alma veya eşzamanlı işlemler sonrasında ID’lerin arasında boşluk olabileceğini kabul edin.
  5. Bir tabloyu başka bir sistemden aktarırken açık ID kullanacaksanız çakışmaları ve sonraki otomatik değeri test edin.

AUTO_INCREMENT sütununu ekleme sırasında elle de belirtebilirsiniz. Bu, veri aktarımında yararlı olabilir; fakat mevcut birincil anahtar değerini tekrar kullanmaya çalışırsanız işlem başarısız olur. Elle verilen değerler ve tablo içindeki mevcut en yüksek değer, sonraki otomatik değer davranışını etkileyebileceğinden aktarım sonrasında yeni bir test kaydı ekleyerek sonucu doğrulayın.

Sık yapılan hatalar​


  • ID’lerin her zaman 1, 2, 3 şeklinde kesintisiz ilerleyeceğini varsaymak.
  • Son eklenen kaydı bulmak için ORDER BY id DESC LIMIT 1 sorgusunu kullanmak; eşzamanlı uygulamalarda bu kayıt başka bir istemciye ait olabilir.
  • AUTO_INCREMENT değerini kullanıcıya görünen güvenlik veya gizlilik kodu olarak kullanmak.
  • İlişkili tablolarda INT, BIGINT, signed ve unsigned türlerini uyumsuz seçmek.

Sık sorulan sorular​


AUTO_INCREMENT değerini baştan başlatabilir miyim?​


Tablonun sonraki otomatik değerini değiştirmek için ALTER TABLE ile başlangıç değeri ayarlanabilir. Ancak mevcut kayıtlarla çakışacak veya mevcut sırayı geriye taşıyacak bir değer seçmeyin; üretim tablosunda işlem öncesi mevcut ID aralığını kontrol edin.

AUTO_INCREMENT yerine UUID kullanmalı mıyım?​


Kimliklerin farklı sistemlerde çakışmaması veya dışarıya tahmin edilmesi zor değerler sunulması gerekiyorsa UUID düşünülebilir. Yalnızca tablo içi, sayısal ve basit bir satır kimliği gerekiyorsa AUTO_INCREMENT genellikle daha doğrudan çözümdür. Seçim, ID’nin kullanıcıya gösterilip gösterilmeyeceği ve sistemlerin birlikte veri üretip üretmeyeceğine göre yapılmalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic