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
VALUESiçinde yalnızca iki değer verilir. - Açık sütun listesinde üç sütun bulunur, ancak
VALUESiç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

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:
- Tablodaki gerçek sütun adlarını ve sütunların sırasını kontrol et.
- Ekleme sırasında kullanılacak sütunları
INSERT INTOsonrasında açıkça yaz. - Otomatik üretilen kimlik, varsayılan değer ve
NULLkabul eden alanları birbirinden ayır. VALUESiçindeki değerleri sütun listesiyle soldan sağa eşleştir.- 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

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.
- Ş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.
- Kolon listesi kontrolü:
INSERT INTOsonrasındaki sütunları tek tek say ve sıralarını kontrol et.VALUESiç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. - Özel alan kontrolü: Otomatik üretilen kimlik alanını, varsayılan değer kullanan sütunu ve
NULLkabul eden alanı birbirinden ayır. Kimlik değeri şema tarafından üretiliyorsa genellikle kolon listesine eklenmez. Bir sütunun varsayılanını kullanmak içinDEFAULT, bilinçli olarak boş değer göndermek için ise yalnızca sütunNULLkabul ediyorsaNULLkullanılmalıdır. - Değer eşleme kontrolü: Her
VALUESsatı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
VALUESsö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.