Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

SQL INSERT Sütun ve Değer Sayısı Hatası Nasıl Çözülür?

sql-insert-sutun-ve-deger-sayisi-hatasi-nasil-cozulur
Bu yazıda neler var?
  1. INSERT sütun ve değer sayısı neden uyuşmaz?
  2. Hata teşhisinde kısa akış: önce tablo şemasını incele
  3. ogrenciler tablosunda hatalı ve düzeltilmiş INSERT örneği
  4. NULL, DEFAULT ve otomatik artan kimlik alanı nasıl ayrılır?
  5. Sorguyu çalıştırmadan önce dört kontrol noktasıyla son kontrol
  6. Sık Sorulan Sorular

SQL INSERT sütun ve değer sayısı hatasının temel nedeni, sorguda belirtilen sütunlarla VALUES bölümündeki değerlerin sayısının veya sırasının uyuşmamasıdır. Açık sütun listesinde üç alan varsa her kayıt satırında üç değer bulunmalı ve bu değerler soldan sağa ilgili sütunlarla eşleşmelidir.

Bu nedenle iki değer vermek eksik, dört değer vermek ise fazla değer uyuşmazlığı oluşturur. Sorgu, beklenen kaydı eklemeden önce reddedilebilir. SQL'i yalnızca bir komut olarak değil, veri yapıları ve temel yazılım mantığıyla birlikte öğrenmek isteyenler için online yazılım eğitimi yaklaşımı da bu tür hataları daha sistemli çözmeye yardımcı olabilir.

INSERT sütun ve değer sayısı neden uyuşmaz?

Bir INSERT INTO sorgusunda sütun listesi ile değer listesi aynı yapıyı izler. Örneğin aşağıdaki sorguda üç sütun ve üç değer vardır:

INSERT INTO kayitlar (ad, soyad, sinif)
VALUES ('Ada', 'Yilmaz', 10);

Burada 'Ada' değeri ad sütununa, 'Yilmaz' değeri soyad sütununa, 10 değeri ise sinif sütununa gider. Sütun ve değer sayısı eşit olsa bile değerlerin sırası değişirse bilgiler yanlış alanlara yazılabilir; ayrıca veri türüyle uyumsuzluk gibi farklı bir hata da oluşabilir.

Hata genellikle şu iki durumda ortaya çıkar:

  • Açık sütun listesinde üç sütun bulunur, ancak VALUES içinde yalnızca iki değer verilir.
  • Açık sütun listesinde üç sütun bulunur, ancak VALUES içinde dört değer verilir.

Sütun listesini hiç yazmadan yalnızca tabloya değer göndermek daha kırılgan bir yöntemdir:

INSERT INTO kayitlar
VALUES ('Ada', 'Yilmaz', 10);

Bu kullanımda değerlerin tablodaki sütun sırasına tam olarak uyması gerekir. Tabloya sonradan sütun eklenmesi veya sütun sırasının beklenenden farklı olması, sorgunun bozulmasına ya da değerlerin yanlış alanlara yönelmesine neden olabilir. Sütunları açıkça yazmak, hangi değerin hangi alana gönderildiğini görünür hâle getirir ve teşhisi kolaylaştırır.

Hata teşhisinde kısa akış: önce tablo şemasını incele

Hata teşhisinde kısa akış: önce tablo şemasını incele

Sütun ve değer sayısı uyuşmadığında doğrudan VALUES bölümünü değiştirmek yerine önce tablonun gerçek yapısını kontrol et. Tablo tasarım ekranında veya kullandığın veritabanı ürününün resmî dokümantasyonunda şu bilgileri incele:

  1. Tablodaki gerçek sütun adlarını ve sütunların sırasını kontrol et.
  2. Ekleme sırasında kullanılacak sütunları INSERT INTO sonrasında açıkça yaz.
  3. Otomatik üretilen kimlik, varsayılan değer ve NULL kabul eden alanları birbirinden ayır.
  4. VALUES içindeki değerleri sütun listesiyle soldan sağa eşleştir.
  5. Sorguyu çalıştırmadan önce her kayıt satırındaki değerleri yeniden say.

Şema incelemesinde yalnızca sütun adlarına bakmak yeterli değildir. Veri türü, alanın NULL kabul edip etmediği, bir varsayılan değer tanımlanıp tanımlanmadığı ve kimlik bilgisinin otomatik üretilip üretilmediği de önemlidir. Örneğin otomatik üretilen bir kimlik alanı çoğu tasarımda kullanıcı tarafından gönderilmeyebilir; ancak bunun nasıl çalıştığı tablo tanımına ve kullanılan ürüne göre kontrol edilmelidir.

Bu akışta amaç, “kaç değer yazdım?” sorusunu “hangi sütunlara, hangi sırayla ve hangi kurallarla değer gönderiyorum?” sorusuyla birlikte değerlendirmektir. Temel programlama ve algoritmik düşünme becerilerini ayrıca gözden geçirmek isteyenler, SQL testi olarak değil genel gelişim amacıyla hazırlanmış bilgi testlerinden yararlanabilir.

ogrenciler tablosunda hatalı ve düzeltilmiş INSERT örneği

ogrenciler tablosunda hatalı ve düzeltilmiş INSERT örneği

Aşağıdaki örnekte ogrenciler tablosunda id, ad, yas ve bolum sütunlarının bulunduğu; id alanının ise otomatik üretildiği varsayılmıştır. Gerçek projede sütun adlarını, otomatik kimlik ayarını, NULL izinlerini ve DEFAULT tanımlarını kendi tablo şemanızdan doğrulamalısınız.

İlk hatada üç sütun belirtilmesine rağmen yalnızca iki değer verilir:

INSERT INTO ogrenciler (ad, yas, bolum)
VALUES ('Ayşe', 20);

İkinci hatada ise yine üç sütun belirtilir; ancak dört değer yazılır:

INSERT INTO ogrenciler (ad, yas, bolum)
VALUES ('Mehmet', 21, 'Yazılım', 'İzmir');

Her iki sorguda da temel sorun, sütun listesi ile VALUES bölümündeki değer listesinin aynı sayıda elemana sahip olmamasıdır. Düzeltilmiş sorguda her sütun için tam olarak bir değer verilir:

INSERT INTO ogrenciler (ad, yas, bolum)
VALUES ('Zeynep', 19, 'Bilgisayar');
Durum Sütun sayısı Değer sayısı Sonuç
Eksik değer 3 2 Uyuşmazlık
Fazla değer 3 4 Uyuşmazlık
Düzeltilmiş sorgu 3 3 Her sütun eşleşir

Düzeltilmiş sorgunun beklenen kaydı ad = 'Zeynep', yas = 19 ve bolum = 'Bilgisayar' alanlarından oluşur. id değeri örnekte verilmez; çünkü otomatik kimliğin nasıl üretileceği kullanılan tablo tanımına ve veritabanı ürününe göre doğrulanmalıdır.

NULL, DEFAULT ve otomatik artan kimlik alanı nasıl ayrılır?

NULL ile DEFAULT aynı anlama gelmez. NULL, bir alan için bilginin bilinmediğini veya değer bulunmadığını belirtir. Boş metinle aynı değildir ve yalnızca ilgili sütun buna izin veriyorsa kullanılabilir:

INSERT INTO ogrenciler (ad, yas, bolum)
VALUES ('Deniz', NULL, 'Bilgisayar');

DEFAULT ise sütun şemasında tanımlanmış varsayılan değerin kullanılmasını amaçlar:

INSERT INTO ogrenciler (ad, yas, bolum)
VALUES ('Ece', DEFAULT, 'Yazılım');

Bu kullanımın anlamlı olabilmesi için ilgili sütunda bir varsayılan değer tanımlanmış olmalıdır. Böyle bir tanım yoksa ortaya çıkacak davranışın kesin biçimde yorumlanması için tablo şeması ve kullanılan ürün birlikte incelenmelidir.

Otomatik üretilen kimlik alanlarında genel yaklaşım, bu alanı açık sütun listesinden çıkarmaktır. Böylece sorgu yalnızca uygulamanın gönderdiği alanları içerir:

INSERT INTO ogrenciler (ad, yas, bolum)
VALUES ('Elif', 22, 'Bilgisayar');

Kimlik sütununa NULL verilmesi veya açık bir kimlik değeri yazılması her tabloda aynı sonucu doğurmayabilir. Bu nedenle önce tablo tanımını kontrol edin. SQL kayıt ekleme, şema okuma ve veri tabanı temelleri hakkında daha fazla içerik için veri tabanı yazıları arşivine göz atabilirsiniz.

Sorguyu çalıştırmadan önce dört kontrol noktasıyla son kontrol

INSERT sorgusunu çalıştırmadan önce aşağıdaki dört kontrolü sırayla yapmak, sütun ve değer sayısı uyuşmazlıklarını büyük ölçüde önler. Her kontrolü yalnızca sorgunun yazımına değil, hedef tablonun gerçek şemasına göre yapmalısın.

  1. Şema kontrolü: Hedef tablo adının ve INSERT içinde kullandığın sütun adlarının gerçekten mevcut olduğunu kontrol et. Yazım hataları, farklı bir şemadaki tabloya bağlanma veya daha önce değişmiş sütun adları sorgunun daha başlamadan hata vermesine yol açabilir.
  2. Kolon listesi kontrolü: INSERT INTO sonrasındaki sütunları tek tek say ve sıralarını kontrol et. VALUES içindeki ilk değer ilk sütuna, ikinci değer ikinci sütuna karşılık gelir. Bu nedenle sayı kadar sıra da önemlidir.
  3. Özel alan kontrolü: Otomatik üretilen kimlik alanını, varsayılan değer kullanan sütunu ve NULL kabul eden alanı birbirinden ayır. Kimlik değeri şema tarafından üretiliyorsa genellikle kolon listesine eklenmez. Bir sütunun varsayılanını kullanmak için DEFAULT, bilinçli olarak boş değer göndermek için ise yalnızca sütun NULL kabul ediyorsa NULL kullanılmalıdır.
  4. Değer eşleme kontrolü: Her VALUES satırındaki değerleri hem sayı hem de sıra bakımından kolon listesiyle karşılaştır. Örneğin iki sütun için hazırlanan çoklu kayıt sorgusunda ikinci satırda tek değer bırakmak hatalıdır:
    INSERT INTO ogrenciler (ad, soyad)
    VALUES
      ('Ayşe', 'Demir'),
      ('Mehmet');

    Düzeltilmiş hâlinde her satır iki değer içerir:

    INSERT INTO ogrenciler (ad, soyad)
    VALUES
      ('Ayşe', 'Demir'),
      ('Mehmet', 'Kaya');

    Çoklu VALUES sözdiziminde her değer listesinin ilgili sütunlarla uyumlu olması gerekir. Bir satırdaki eksik veya fazla değer, tek bir satır yerine bütün INSERT ifadesinin başarısız olmasına neden olabilir. Hata sonrası kısmi işlem davranışı ve çoklu kayıt sözdizimi veritabanı ürününe ve işlem yapılandırmasına göre değişebileceği için kullandığın ürünün resmî belgelerini ayrıca kontrol et.

Sorguyu göndermeden önce şu kısa sırayı uygula: tablo ve sütunlar mevcut mu, kolon listesi doğru mu, özel alanlar doğru ele alınmış mı, her değer satırı eksiksiz mi? Dört yanıt da olumluysa INSERT sorgusunu çalıştırabilirsin.

Sık Sorulan Sorular

INSERT sorgusunda sütun listesini yazmak zorunlu mudur?

Her durumda sözdizimsel olarak zorunlu olmayabilir; ancak sütun listesini açıkça yazmak daha güvenlidir. Böylece değerlerin hangi sütunlara gittiği netleşir ve tabloya yeni bir sütun eklendiğinde oluşabilecek hataların önüne geçmek kolaylaşır.

NULL ile DEFAULT arasındaki fark nedir?

NULL, ilgili alana bilinçli olarak boş değer gönderir. DEFAULT ise sütun için tanımlanmış varsayılan değerin kullanılmasını ister. Bu iki seçeneğin geçerli olup olmadığı tablo şemasına bağlıdır.

Otomatik artan id alanı INSERT sorgusuna eklenmeli mi?

Kimlik alanı veritabanı tarafından otomatik üretiliyorsa normal kayıt ekleme işleminde genellikle sorguya dahil edilmez. Sütunu dışarıda bırakarak diğer alanları açıkça belirtmek, yanlış kimlik değeri gönderme riskini azaltır.

Çoklu INSERT işleminde yalnızca bir satır hatalıysa ne olur?

Eksik veya fazla değer içeren bir satır, çoğu durumda tek ifadeyi geçersiz kılar ve kayıt ekleme işlemi gerçekleşmez. Ancak hata sonrası kısmi işlem davranışı veritabanı ürününe ve işlem ayarlarına göre değişebileceğinden, kritik verilerde sonucu mutlaka kontrol etmelisin.

Bu dört kontrolü alışkanlık hâline getirerek SQL INSERT hatalarını sorguyu çalıştırmadan önce daha hızlı teşhis edebilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara