Veritabanı

SQL INSERT Komutu ile Veri Ekleme

SQL INSERT Komutu ile Veri Ekleme

İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler, satırlar ve sütunlardan oluşan tablolar içinde saklanır. Bir yazılım projesinde kullanıcı kaydı oluşturmaktan sistem loglarını tutmaya kadar yapılan tüm kayıt işlemleri temel bir SQL komutuna dayanır. CRUD (Create, Read, Update, Delete) operasyonlarının ilk ve en kritik adımı olan “Create” işlemi, SQL dilinde INSERT INTO komutu ile gerçekleştirilir.

SQL INSERT INTO Komutunun Temel Mantığı

INSERT INTO ifadesi, veritabanında daha önceden tanımlanmış bir tabloya yeni bir satır (kayıt) eklemek amacıyla kullanılır. Bir tabloya veri eklerken tablonun şemasına, sütunların kabul ettiği veri türlerine (metin, sayı, tarih vb.) ve tanımlanmış kısıtlamalara (constraints) kesinlikle uyulması gerekir.

INSERT işlemi gerçekleştirilirken genel olarak iki farklı yaklaşım uygulanır:

  • Sütun isimlerini açıkça belirterek yalnızca hedeflenen alanlara veri göndermek
  • Tablodaki tüm sütun sırasını gözeterek sütun adı belirtmeden doğrudan değerleri göndermek

Yazılım geliştirme pratiklerinde ve veritabanı mimarisinde, şema değişikliklerinden etkilenmemek adına sütun isimlerinin açıkça yazıldığı ilk yaklaşım standart kabul edilir.

Temel Sözdizimi ve Kullanım Biçimleri

Veritabanı işlemlerinde en sık karşılaşılan senaryolar üzerinden INSERT komutunun farklı kullanımlarını inceleyelim. Örnek senaryolarımız için kullanicilar adında; id, ad, soyad, eposta, yas ve kayit_tarihi sütunlarına sahip bir tabloyu baz alacağız.

Belirli Sütunları Belirterek Veri Ekleme

En güvenli ve yaygın kullanılan yöntemdir. Eklenecek değerlerin hangi sütuna karşılık geldiği net bir şekilde tanımlanır.

INSERT INTO kullanicilar (ad, soyad, eposta, yas)
VALUES ('Ahmet', 'Yılmaz', 'ahmet.yilmaz@example.com', 28);

Bu komut satırında şunlar gerçekleşir:

  • INSERT INTO kullanicilar ifadesiyle verinin hangi tabloya yazılacağı bildirilir.
  • Parantez içinde verilerin atanacağı sütun listesi (ad, soyad, eposta, yas) tanımlanır.
  • VALUES anahtar kelimesinin ardından gelen parantezde, yukarıdaki sütun sırasıyla birebir eşleşecek değerler verilir.
  • Metin (string) türündeki veriler tek tırnak içinde, sayısal veriler ise doğrudan tırnaksız yazılır.
  • id sütunu genellikle otomatik artan (AUTO_INCREMENT veya IDENTITY) olarak yapılandırıldığı için komuta dahil edilmemiştir; sistem bu değeri kendisi üretir.

Sütun Adı Belirtmeden Tüm Alanlara Veri Ekleme

Tablodaki tüm sütunlara değer girilecekse sütun adları atlanabilir. Ancak bu yöntemde değerler, tablonun fiziksel oluşturulma sırasına birebir uymak zorundadır.

INSERT INTO kullanicilar
VALUES (101, 'Mehmet', 'Demir', 'mehmet.demir@example.com', 34, '2025-05-15');

Bu yöntemde sistem, verilen değerleri tablonun ilk sütunundan son sütununa doğru sırayla yerleştirir. Tabloya ileride yeni bir sütun eklenmesi veya mevcut sütunların yerinin değişmesi durumunda bu tür sorgular hata verir veya verilerin yanlış sütunlara yazılmasına yol açar. Bu nedenle üretim (production) ortamlarındaki kod bloklarında bu yöntemin kullanılması önerilmez.

Çoklu Kayıt Ekleme (Multi-Row Insert)

Tek bir INSERT sorgusu ile aynı anda birden fazla satır veritabanına eklenebilir. Bu yöntem, her kayıt için ayrı bir bağlantı veya sorgu çalıştırmak yerine tek bir ağ paketi üzerinden veritabanına ulaştığı için performansı ciddi oranda artırır.

INSERT INTO kullanicilar (ad, soyad, eposta, yas)
VALUES 
    ('Ayşe', 'Kaya', 'ayse.kaya@example.com', 25),
    ('Can', 'Öztürk', 'can.ozturk@example.com', 31),
    ('Zeynep', 'Aydın', 'zeynep.aydin@example.com', 22);

Yukarıdaki komutta VALUES ifadesinden sonra virgülle ayrılmış birden fazla parantez grubu kullanılmıştır. Veritabanı motoru bu işlemi tek bir işlem (transaction) bloğu içinde ele alarak tüm satırları sırayla tabloya yazar.

Başka Bir Tablodan Veri Kopyalama (INSERT INTO SELECT)

Bazı durumlarda yeni veriler doğrudan klavyeden girilmez, mevcut bir tablodaki verilerin filtrelenerek başka bir tabloya aktarılması gerekir. Bu işlem için INSERT INTO SELECT yapısı kullanılır.

Örneğin, kullanicilar tablosundaki 30 yaşından büyük kişileri kullanicilar_arsiv tablosuna aktaralım:

INSERT INTO kullanicilar_arsiv (ad, soyad, eposta, yas)
SELECT ad, soyad, eposta, yas
FROM kullanicilar
WHERE yas > 30;

Bu sorguda VALUES anahtar kelimesi kullanılmaz. Bunun yerine bir SELECT sorgusu çalıştırılır ve dönen sonuç kümesi doğrudan hedef tablonun belirtilen sütunlarına yazılır. SELECT ile çağrılan sütunların sayısı ve veri tipleri, INSERT INTO kısmındaki sütunlarla tam olarak uyuşmalıdır.

Veri Eklerken Dikkat Edilmesi Gereken Kısıtlamalar

Veritabanı tablolarında veri bütünlüğünü korumak için çeşitli kurallar ve kısıtlamalar tanımlanır. INSERT işlemi yapılırken bu kısıtlamaların ihlal edilmesi durumunda veritabanı hata döndürür ve kayıt gerçekleşmez:

  • NOT NULL Kısıtlaması: Bir sütun NOT NULL olarak tanımlanmışsa ve o sütuna varsayılan (DEFAULT) bir değer atanmamışsa, INSERT sorgusunda o sütuna mutlaka geçerli bir değer gönderilmelidir.
  • UNIQUE Kısıtlaması: Bir sütunda yinelenen değerlere izin verilmiyorsa (örneğin e-posta adresi), daha önce eklenmiş bir değer tekrar eklenmeye çalışıldığında benzersizlik hatası alınır.
  • FOREIGN KEY Kısıtlaması: Başka bir tabloyla ilişkili olan sütunlara (örneğin departman_id), ana tabloda karşılığı bulunmayan bir değer yazılamaz.
  • CHECK Kısıtlaması: Belirli bir kurala bağlı sütunlarda (örneğin yas >= 18), şartı sağlamayan değerler eklendiğinde işlem engellenir.
  • Veri Türü Uyuşmazlığı: Sayısal (INT, FLOAT) bekleyen bir sütuna metin girilmesi veya tarih formatının veritabanı standartlarına uygun olmaması durumunda sorgu başarısız olur.

Siber Güvenlik Açısından INSERT İşlemleri

Uygulama geliştirirken INSERT komutlarının dinamik kullanımı, güvenlik açıklarına zemin hazırlayabilir. Kullanıcıdan alınan verilerin (örneğin kayıt formları) doğrudan SQL cümleleri içerisine metin birleştirme yöntemiyle eklenmesi, SQL Injection zafiyetine yol açar.

Kötü niyetli bir kullanıcı, girdi alanlarına SQL komut parçacıkları yerleştirerek veritabanı mantığını bozabilir veya yetkisiz işlemler gerçekleştirebilir. Bu riski tamamen ortadan kaldırmak için doğrudan SQL metni oluşturmak yerine her zaman parametreli sorgular (Prepared Statements) veya ORM (Object-Relational Mapping) araçları kullanılmalıdır.

Parametreli sorgu yaklaşımında veritabanı sürücüsü, kullanıcı girdisini çalıştırılabilir bir kod parçası olarak değil, yalnızca saf bir veri değeri olarak kabul eder ve güvenli bir şekilde tabloya yazar.

Özet ve Sonraki Adımlar

SQL INSERT komutu, ilişkisel veritabanlarında yeni veri üretmenin temel aracıdır. Güvenli, hatasız ve performanslı veri ekleme işlemleri için sütun adlarının açıkça belirtilmesi, toplu veri girişlerinde çoklu ekleme yapısının tercih edilmesi ve kullanıcı girdilerinin parametreli sorgularla filtrelenmesi büyük önem taşır.

INSERT ile veri tabanına kayıt ekleme mantığını kavradıktan sonra, eklenen bu verileri sorgulamak için SELECT komutunun filtreleme mekanizmalarını (WHERE, ORDER BY, GROUP BY) ve mevcut kayıtları güncellemek veya silmek için UPDATE ve DELETE ifadelerini öğrenmeye geçebilirsiniz.

#ilişkisel veritabanı#rdbms#sql dersleri#sql insert#veritabanı

Yorumlar

Henüz yorum yok. İlk yorumu siz yazın.

Yorum yaz

Yorumlar yönetici onayından sonra yayınlanır.