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

SQL INSERT, UPDATE ve DELETE Nasıl Kullanılır? Güvenli Veri Değiştirme

sql-insert-update-ve-delete-nasil-kullanilir-guvenli-veri-degistirme
Bu yazıda neler var?
  1. SQL INSERT, UPDATE ve DELETE Nasıl Kullanılır? Güvenli Veri Değiştirme
  2. INSERT ile Veri Ekleme
  3. UPDATE ile Veri Güncelleme
  4. DELETE ile Veri Silme
  5. Güvenli Veri Değiştirme İçin Öneriler
  6. Sık Yapılan Hatalar
  7. Sonuç ve Bilgi Testi
  8. Sık Sorulan Sorular

SQL INSERT, UPDATE ve DELETE Nasıl Kullanılır? Güvenli Veri Değiştirme

SQL'de veri eklemek, güncellemek ve silmek için sırasıyla INSERT, UPDATE ve DELETE komutları kullanılır. INSERT tabloya yeni satırlar ekler, UPDATE mevcut satırlardaki değerleri değiştirir, DELETE ise seçilen satırları tablodan kaldırır. Bu üç komut birlikte "DML" (Data Manipulation Language) olarak adlandırılır ve güvenli kullanımları büyük ölçüde WHERE koşulunun doğru yazılmasına bağlıdır. Aşağıda her komutun sözdizimi ve dikkat edilmesi gereken noktalar örneklerle açıklanıyor.

INSERT ile Veri Ekleme

INSERT komutu, bir tabloya yeni satır eklemek için kullanılır. En temel sözdizimi şu şekildedir:

INSERT INTO tablo_adi (sutun1, sutun2, sutun3)
VALUES (deger1, deger2, deger3);

Sütun adlarını belirtmek isteğe bağlıdır ama önerilir. Sütunları belirtmeden INSERT INTO tablo_adi VALUES (...) yazmak da mümkündür, fakat bu durumda değerlerin tablodaki sütun sırasıyla tam olarak eşleşmesi gerekir. Tablo yapısı değiştiğinde (yeni sütun eklendiğinde) bu tür sorgular sessizce hata verebilir, dolayısıyla sütun isimlerini açıkça yazmak daha güvenlidir.

Tek satır eklemek için yukarıdaki temel yapı yeterlidir:

INSERT INTO musteriler (ad, email, sehir)
VALUES ('Ayşe Kaya', '[email protected]', 'İzmir');

Aynı anda birden fazla satır eklemek gerektiğinde, çoğu modern DBMS (MySQL, PostgreSQL, SQL Server) tek bir INSERT ifadesinde virgülle ayrılmış çoklu VALUES grubunu destekler:

INSERT INTO musteriler (ad, email, sehir)
VALUES
  ('Ayşe Kaya', '[email protected]', 'İzmir'),
  ('Mehmet Demir', '[email protected]', 'Ankara'),
  ('Zeynep Yıldız', '[email protected]', 'Bursa');

Bu yaklaşım, satırları tek tek eklemeye kıyasla daha az sorgu döngüsü gerektirdiği için performans açısından avantajlıdır. Çoklu satır INSERT sözdizimi kullanılan veritabanı yönetim sistemine göre değişebilir; uygun sözdizimi için ilgili sistemin belgelerini kontrol et.

UPDATE ile Veri Güncelleme

UPDATE komutu, tablodaki mevcut satırların bir veya daha fazla sütun değerini değiştirmek için kullanılır. Temel sözdizimi:

UPDATE tablo_adi
SET sutun1 = deger1, sutun2 = deger2
WHERE kosul;

Buradaki WHERE koşulu, güncellemenin hangi satırları etkileyeceğini belirler ve UPDATE komutunun en kritik parçasıdır. Örneğin belirli bir müşterinin şehir bilgisini güncellemek için:

UPDATE musteriler
SET sehir = 'İstanbul'
WHERE id = 42;

WHERE koşulu unutulduğunda veya yanlış yazıldığında ciddi sonuçlar ortaya çıkabilir. Örneğin UPDATE musteriler SET sehir = 'İstanbul'; şeklinde WHERE koşulu olmadan çalıştırılan bir sorgu, tablodaki tüm müşterilerin şehir bilgisini tek bir değerle değiştirir; yani binlerce satırlık doğru veri, bir hata sonucu geri dönüşü zor şekilde kaybolabilir. Bu yüzden UPDATE yazarken önce aynı koşulla bir SELECT çalıştırıp hangi satırların etkileneceğini görmek, ardından UPDATE'e geçmek yaygın ve güvenli bir alışkanlıktır.

DELETE ile Veri Silme

DELETE, bir tablodan satır silmek için kullanılır. Temel sözdizimi şöyledir:

DELETE FROM calisanlar
WHERE departman = 'Muhasebe';

Bu sorgu, departman sütunu "Muhasebe" olan tüm satırları siler. UPDATE gibi DELETE de WHERE koşulu olmadan çalıştırılırsa tablodaki tüm satırları siler. Bu yüzden çalıştırmadan önce aynı koşulla bir SELECT yapıp hangi satırların etkileneceğini görmek iyi bir alışkanlıktır.

DELETE ile karıştırılan bir diğer komut TRUNCATE TABLE'dır. İkisi de veri siler ama farklı çalışır: DELETE satır satır siler, WHERE ile filtrelenebilir ve genellikle geri alınabilir (rollback edilebilir). TRUNCATE ise tüm tabloyu tek seferde boşaltır, WHERE koşulu kabul etmez; performans ve loglama davranışı kullanılan veritabanı yönetim sistemine göre değişebilir. Tabloyu tamamen boşaltmak istiyorsanız TRUNCATE, belirli satırları silmek istiyorsanız DELETE doğru seçimdir.

Güvenli Veri Değiştirme İçin Öneriler

INSERT, UPDATE ve DELETE kalıcı değişiklikler yaptığı için birkaç önlem almak işinizi kurtarabilir:

  • Transaction kullanın. Değişiklikleri bir işlem bloğu içinde yapıp sonucu kontrol ettikten sonra onaylayabilirsiniz:
BEGIN;

UPDATE calisanlar
SET maas = maas * 1.10
WHERE departman = 'Satis';

-- sonucu kontrol edin, doğruysa:
COMMIT;
-- yanlışsa:
ROLLBACK;

İşlem başlatma sözdizimi kullanılan veritabanı yönetim sistemine göre değişebilir. Bazı sistemlerde BEGIN, bazılarında BEGIN TRANSACTION veya START TRANSACTION kullanılır; COMMIT ve ROLLBACK kullanım ayrıntılarını ilgili sistemin belgelerinden kontrol etmek gerekir.

  • Yedek alın. Özellikle toplu güncelleme veya silme öncesi tablonun veya ilgili satırların yedeğini almak, hata durumunda geri dönüş sağlar.
  • Önce test ortamında deneyin. Karmaşık UPDATE veya DELETE sorgularını canlı veritabanında değil, test veya geliştirme ortamında çalıştırıp sonucu doğrulayın.
  • Önce SELECT ile kontrol edin. WHERE koşulunu değiştirmeden SELECT ile çalıştırmak, hangi satırların etkileneceğini önceden görmenizi sağlar.

Bu adımlar, tek bir yanlış koşulun tüm tabloyu etkilemesini önleyen basit ama etkili güvenlik katmanlarıdır.

Sık Yapılan Hatalar

SQL ile veri değiştirirken tekrar eden bazı hatalar, çoğu veri kaybı vakasının ortak sebebidir. Bunları bilmek, aynı hatayı yapmadan önce fark etmenizi sağlar.

WHERE koşulunu unutmak: En sık görülen ve en yıkıcı hata budur. UPDATE musteriler SET durum = 'pasif'; gibi bir komut, WHERE koşulu olmadığı için tablodaki tüm satırları etkiler. Aynı durum DELETE için de geçerlidir. Bu tür hatalar genellikle acele yazılan komutlarda veya kopyala-yapıştır sırasında koşul satırının atlanmasıyla ortaya çıkar.

Yanlış tablo veya yanlış veritabanı üzerinde çalışmak: Özellikle birden fazla ortamla (test, staging, production) aynı anda çalışılan durumlarda, komutun hangi bağlantı üzerinden çalıştırıldığını kontrol etmemek ciddi sonuçlar doğurabilir. Test ortamında yazılan bir DELETE komutunun production bağlantısında çalıştırılması, geri dönüşü olmayan veri kayıplarına yol açabilir.

WHERE koşulunun kapsamını yanlış hesaplamak: Koşul yazılmış olsa da, beklenenden fazla satırı kapsayabilir. Örneğin WHERE ad LIKE '%li%' gibi geniş bir eşleşme, hedeflenmeyen kayıtları da işleme dahil edebilir. Koşulu yazdıktan sonra önce SELECT ile test etmek bu riski azaltır.

Transaction kullanmadan toplu işlem yapmak: Birden fazla ilişkili UPDATE veya DELETE komutu tek bir transaction içinde çalıştırılmazsa, işlem yarıda kesildiğinde veri tutarsız bir durumda kalabilir. Bu, özellikle birbirine bağlı tabloları güncelleyen işlemlerde ciddi bir risktir.

Yedek almadan büyük değişiklikler yapmak: Çok satırı etkileyen bir UPDATE veya DELETE öncesinde yedek almamak, hata durumunda geri dönüş şansını ortadan kaldırır. Küçük bir önlem, büyük bir veri kaybını engelleyebilir.

Sonuç ve Bilgi Testi

INSERT, UPDATE ve DELETE komutları, veritabanı yönetiminin temelini oluşturur. INSERT ile yeni veri eklerken sütun-değer eşleşmesine, UPDATE ile veri güncellerken WHERE koşulunun doğruluğuna, DELETE ile veri silerken de işlemin geri alınamaz olduğuna dikkat etmek gerekir. Bu üç komutu güvenli kullanmanın anahtarı, her işlemden önce SELECT ile kontrol yapmak, mümkünse transaction kullanmak ve kritik değişikliklerden önce yedek almaktır.

Öğrendiklerinizi pekiştirmek isterseniz SQL bilgi testi sayfasından kendinizi test edebilirsiniz.

Sık Sorulan Sorular

UPDATE veya DELETE komutunu yanlışlıkla çalıştırdım, geri alabilir miyim?

Eğer işlem bir transaction içindeyse ve henüz COMMIT edilmediyse ROLLBACK ile geri alabilirsiniz. COMMIT edilmiş bir işlemi geri almak için ise genellikle veritabanı yedeğine veya log tabanlı kurtarma yöntemlerine başvurmak gerekir. Bu yüzden kritik işlemlerden önce yedek almak önemlidir.

INSERT sırasında sütun isimlerini belirtmek zorunlu mudur?

Zorunlu değildir ama şiddetle önerilir. Sütun isimlerini belirtmeden yapılan bir INSERT, tablo yapısı değiştiğinde (yeni sütun eklenmesi gibi) hataya veya yanlış veri girişine yol açabilir. Sütun isimlerini açıkça yazmak, kodunuzu daha güvenli ve okunabilir hale getirir.

WHERE koşulu olmadan UPDATE veya DELETE çalıştırmak her zaman mı yasaktır?

Teknik olarak yasak değildir, bazı durumlarda (örneğin bir tablodaki tüm verileri sıfırlamak) kasıtlı olarak koşulsuz çalıştırılabilir. Ancak bu, bilinçli bir tercih olmalı, yanlışlıkla oluşan bir eksiklik değil. Böyle bir işlem yapacaksanız önce satır sayısını SELECT COUNT(*) ile kontrol etmeniz önerilir.

Bu üç komutu doğru ve dikkatli kullanmak, veritabanınızla güvenli bir şekilde çalışmanın en temel adımıdır.

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