SQL Verilerini Kalıcı Olarak Silme (DELETE) Rehberi
Meta açıklaması: SQL DELETE komutuyla verileri güvenle nasıl sileceğinizi, çoklu tablo silme işlemlerini ve yabancı anahtar (CASCADE / SET NULL) davranışlarını öğrenin.
🎯 Bu Rehberde Ne Öğreneceksiniz?
Bu kılavuzda, SQL’de DELETE komutunu kullanarak veritabanından kalıcı veri silmeyi öğreneceksiniz.
- Tek tablo veya birden fazla tablodan silme
WHERE,LIKE,JOINveSubquerykullanımıON DELETE CASCADEveSET NULLdavranışları- Güvenli silme yöntemleri (SELECT ile test etme)
🧠 Teknik Özet
- Ana konu: SQL’de veri silme işlemi
- Amaç: Artık kullanılmayan veya hatalı verileri kalıcı şekilde kaldırmak
- Temel adımlar:
- Veritabanı ve tabloları oluşturma
- DELETE sözdizimiyle tek tablo silme
- LIKE ve Subquery ile toplu silme
- JOIN ile çoklu tablo silme
- ON DELETE CASCADE ve SET NULL farklarını öğrenme
⚙️ 1. Ortamı Hazırlama
Sunucuya SSH ile bağlanın:
ssh [email protected]
mysql -u admin -p
💬 MySQL istemcisini başlatır.
CREATE DATABASE deleteDB;
USE deleteDB;
💬 deleteDB adlı örnek veritabanını oluşturur ve aktif eder.
🧱 2. Örnek Tablolar
Üyeler (uyeler)
CREATE TABLE uyeler (
uyeID INT PRIMARY KEY,
ad VARCHAR(30),
sehir VARCHAR(20)
);
Ekipmanlar (ekipmanlar)
CREATE TABLE ekipmanlar (
ekipmanID INT PRIMARY KEY,
ekipmanTipi VARCHAR(30),
marka VARCHAR(20),
sahipID INT,
CONSTRAINT fk_sahipID FOREIGN KEY (sahipID) REFERENCES uyeler(uyeID)
);
💾 3. Örnek Verileri Ekle
INSERT INTO uyeler VALUES
(1, 'Kerem', 'İstanbul'),
(2, 'Ayşe', 'İzmir'),
(3, 'Levent', 'Ankara');
INSERT INTO ekipmanlar VALUES
(1, 'Gitar', 'Fandar', 1),
(2, 'Mikrofon', 'Sure', 2),
(3, 'Synthesizer', 'Korgi', 3),
(4, 'Amfi', 'Peabey', 1);
🧹 4. Tek Tabloda Veri Silme
Temel Yapı
DELETE FROM tablo_adi
WHERE koşullar;
⚠️ Uyarı: Eğer WHERE kullanmazsanız, tablodaki tüm veriler kalıcı olarak silinir.
Örnek:
DELETE FROM ekipmanlar
WHERE marka = 'Korgi';
💬 Korgi markalı ekipman kaydını siler.
Silmeden önce kontrol etmek için:
SELECT * FROM ekipmanlar WHERE marka = 'Korgi';
🔁 5. LIKE ve Subquery ile Koşullu Silme
LIKE ile Toplu Silme
DELETE FROM ekipmanlar
WHERE ekipmanTipi LIKE '%Gitar%';
💬 Adında “Gitar” geçen tüm kayıtları siler.
Subquery ile Silme
DELETE FROM ekipmanlar
WHERE sahipID IN (
SELECT uyeID FROM uyeler WHERE ad LIKE 'L%'
);
💬 Adı “L” ile başlayan üyelerin sahip olduğu ekipmanları siler.
🔗 6. JOIN ile Çoklu Tablodan Silme
Bazı sistemlerde, JOIN kullanarak iki farklı tablodan aynı anda veri silinebilir:
DELETE ekipmanlar, yasakliMarkalar
FROM ekipmanlar
JOIN yasakliMarkalar
ON ekipmanlar.marka = yasakliMarkalar.markaAdi
WHERE menseiUlke = 'ABD';
💬 “ABD” menşeli markalar her iki tablodan da kaldırılır.
Sadece bir tablodan silmek isterseniz:
DELETE ekipmanlar
FROM ekipmanlar
JOIN yasakliMarkalar
ON ekipmanlar.marka = yasakliMarkalar.markaAdi
WHERE menseiUlke = 'ABD';
🔒 7. FOREIGN KEY Davranışları (CASCADE ve SET NULL)
Varsayılan olarak, bağlı tablolarda ilişkili kayıt varsa DELETE işlemi hata verir.
Hata Örneği
DELETE FROM uyeler WHERE uyeID = 1;
🛑 “Cannot delete or update a parent row” hatası alırsınız.
özüm 1 – ON DELETE CASCADE
ALTER TABLE ekipmanlar
DROP FOREIGN KEY fk_sahipID;
ALTER TABLE ekipmanlar
ADD CONSTRAINT fk_sahipID
FOREIGN KEY (sahipID) REFERENCES uyeler(uyeID)
ON DELETE CASCADE;
💬 Üye silindiğinde, ona ait ekipmanlar da otomatik silinir.
Çözüm 2 – ON DELETE SET NULL
ALTER TABLE ekipmanlar
ADD CONSTRAINT fk_sahipID
FOREIGN KEY (sahipID) REFERENCES uyeler(uyeID)
ON DELETE SET NULL;
💬 Üye silindiğinde, ekipmanlar kalır ancak sahipID alanı NULL olur.
🧨 8. DELETE vs TRUNCATE TABLE
| Özellik | DELETE | TRUNCATE |
|---|---|---|
| Silme Alanı | Seçili satırlar | Tüm tablo |
| Geri Alma | Mümkün (ROLLBACK) | Genellikle mümkün değil |
| Loglama | Her satır loglanır | Minimum loglama |
| Performans | Daha yavaş | Çok hızlı |
| Kullanım | Detaylı silme | Tüm tabloyu boşaltma |
❓ Sıkça Sorulan Sorular (SSS)
- Silmeden önce nasıl emin olabilirim?
Aynı WHERE koşuluyla SELECT * sorgusu çalıştırın, silinecek kayıtları görün.
- DELETE ve TRUNCATE arasındaki fark nedir?
DELETE tek tek satır siler, TRUNCATE tüm tabloyu hızlıca boşaltır.
- ON DELETE SET NULL ne işe yarar?
Silinen kaydın alt tablodaki ilişkili alanını NULL yapar, veri korunur.
- JOIN ile silme hangi durumlarda kullanılır?
İlişkili iki tablodaki ortak kayıtları temizlemek için.
- Silme işlemini geri alabilir miyim?
Yalnızca TRANSACTION içindeyseniz ve COMMIT etmediyseniz mümkündür.
☁️ Sonuç ve Öneri
Bu rehberde SQL’de DELETE komutunu, WHERE, JOIN, Subquery, CASCADE ve SET NULL davranışlarını öğrendiniz. Veri bütünlüğünü bozmadan güvenli silme işlemleri yapabilirsiniz.
💡 Tüm örnekleri Rabisu Bulut üzerinde kendi MySQL sunucunuzda test ederek deneyebilirsiniz. Rabisu, geliştiriciler için güvenli ve ölçeklenebilir bulut altyapısı sunar. 🚀