Skip to main content

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, JOIN ve Subquery kullanımı
  • ON DELETE CASCADE ve SET NULL davranış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:
    1. Veritabanı ve tabloları oluşturma
    2. DELETE sözdizimiyle tek tablo silme
    3. LIKE ve Subquery ile toplu silme
    4. JOIN ile çoklu tablo silme
    5. 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

ÖzellikDELETETRUNCATE
Silme AlanıSeçili satırlarTüm tablo
Geri AlmaMümkün (ROLLBACK)Genellikle mümkün değil
LoglamaHer satır loglanırMinimum loglama
PerformansDaha yavaşÇok hızlı
KullanımDetaylı silmeTüm tabloyu boşaltma

❓ Sıkça Sorulan Sorular (SSS)

  1. Silmeden önce nasıl emin olabilirim?

Aynı WHERE koşuluyla SELECT * sorgusu çalıştırın, silinecek kayıtları görün.

  1. DELETE ve TRUNCATE arasındaki fark nedir?

DELETE tek tek satır siler, TRUNCATE tüm tabloyu hızlıca boşaltır.

  1. ON DELETE SET NULL ne işe yarar?

Silinen kaydın alt tablodaki ilişkili alanını NULL yapar, veri korunur.

  1. JOIN ile silme hangi durumlarda kullanılır?

İlişkili iki tablodaki ortak kayıtları temizlemek için.

  1. 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. 🚀