SQL DELETE Komutu Nedir? Veritabanından Veri Silme
SQL’de DELETE komutu, veritabanındaki bir tablodan belirli kriterlere uyan kayıtları (satırları) kalıcı olarak silmek için kullanılan kritik bir DML (Data Manipulation Language) işlemidir. Tıpkı UPDATE komutunda olduğu gibi, DELETE işleminde de WHERE şartı hayati önem taşır. Eğer WHERE koşulunu yazmayı unutursanız, tablodaki tüm veriler silinir ve eğer güncel bir yedeğiniz yoksa bu büyük bir felakete dönüşebilir!
DELETE Syntax (Sözdizimi) Yapısı
1 2 | DELETE FROM tablo_adi WHERE kosul; |
- tablo_adi: İçinden kayıt silmek istediğiniz tablonun adıdır.
- WHERE kosul: Hangi satırların silineceğini belirleyen filtreleme şartıdır. (Uyarı: Kullanılmazsa tablodaki tüm satırlar temizlenir!)
SQL DELETE Kullanımı: Adım Adım Örnekler
1. Belirli ve Tek Bir Kaydı Silme
Örneğin, musteriler tablosundan sistemden ayrılan 5 numaralı müşteriyi silelim:
1 2 | DELETE FROM musteriler WHERE musteri_id = 5; |
- Sadece
musteri_iddeğeri 5 olan o tek kayıt tablodan temizlenir.
2. Belirli Bir Koşulu Sağlayan Çoklu Kayıtları Silme
Geçmişe dönük temizlik yapmak isteyebilirsiniz. siparisler tablosunda 2020 yılından önce verilen tüm eski siparişleri silelim:
1 2 | DELETE FROM siparisler WHERE siparis_tarihi < '2020-01-01'; |
- Belirtilen tarihten daha eski olan tüm sipariş kayıtları topluca silinecektir.
3. Metin (String) Şartına Göre Silme İşlemi
Bir departman kapandığında o departmandaki kayıtları silmek gerekebilir. calisanlar tablosunda “Muhasebe” departmanındaki tüm çalışanları silelim:
1 2 | DELETE FROM calisanlar WHERE departman = 'Muhasebe'; |
- Departman sütununda “Muhasebe” yazan tüm satırlar silinir.
4. IN Operatörü ile Birden Fazla Belirli Kaydı Silme
Sadece 1 tane değil, belirlediğiniz 3-4 farklı ID’ye sahip kaydı tek seferde silmek için IN operatörü hayat kurtarır:
1 2 | DELETE FROM urunler WHERE urun_id IN (10, 15, 22); |
- Ürün ID’si 10, 15 ve 22 olan üç farklı ürün tek bir sorguyla hızlıca silinir.
5. LIMIT ile Kontrollü Silme İşlemi (MySQL Özel)
Milyonlarca satırlık bir tabloda silme işlemi yaparken veritabanını kilitlememek ve sunucuyu yormamak için işlemi sınırlandırabilirsiniz:
1 2 3 | DELETE FROM log_kayitlari WHERE durum = 'Hata' LIMIT 500; |
- Durumu “Hata” olan kayıtlardan sadece ilk 500 tanesini siler. Bu işlemi bir döngüye sokarak yavaş yavaş temizlik yapabilirsiniz.
DELETE Kullanırken Hayati Uyarılar ve İpuçları
- WHERE şartını unutmayın: Sadece
DELETE FROM calisanlar;yazarsanız tüm çalışanlar geri dönüşü zor bir şekilde silinir. - Önce SELECT ile test edin: Silme kodunu çalıştırmadan önce, her zaman aynı WHERE şartı ile verileri görüntüleyin ve hedeflediğiniz veriler olduğundan emin olun:1SELECT * FROM musteriler WHERE musteri_id = 5;
Ekrana gelen veriler silmek istediğiniz verilerse,SELECT *kısmınıDELETEile değiştirip sorguyu güvenle çalıştırabilirsiniz.
Mülakatların Vazgeçilmezi: DELETE ve TRUNCATE Farkı Nedir?
Bu iki komut sıkça karıştırılır ve genellikle yazılımcı mülakatlarında sorulur. Aralarındaki temel farklar şunlardır:
- DELETE: Satırları tek tek siler. Her sildiği satırı “Transaction Log” (işlem günlüğü) dosyasına yazar. Bu sayede yavaştır ama
ROLLBACKkomutu ile geri alınabilir. WHERE koşulu kullanılarak belirli veriler filtrelenebilir. - TRUNCATE: Tablonun içini tek seferde, yapısını bozmadan komple boşaltır. Satır satır log tutmadığı için inanılmaz hızlıdır. Ancak işlem geri alınamaz! WHERE koşulu kullanılamaz.1TRUNCATE TABLE calisanlar;


