DELETE, TRUNCATE ve DROP komutları arasındaki fark nedir?

Cevap

  • DELETE: satırları koşula göre siler, tablo kalır.
  • TRUNCATE: tablodaki tüm satırları hızlıca siler, tablo yapısı kalır.
  • DROP: tabloyu yapısıyla birlikte (index, constraint, trigger) tamamen kaldırır.
DELETETRUNCATEDROP
Komut türüDMLDDLDDL
WHEREVarYokYok
Hız (büyük tablo)Yavaş, satır satır loglarÇok hızlı, veri sayfalarını serbest bırakırHızlı
TriggerSatır trigger'ları çalışırSatır trigger'ları çalışmazÇalışmaz
Auto incrementDevam ederGenelde sıfırlanırTablo yok
RollbackTransaction içinde mümkünPostgreSQL ve SQL Server'da mümkün, MySQL'de implicit commitPostgreSQL'de transaction içinde mümkün
DELETE FROM sessions WHERE expires_at < now();
TRUNCATE TABLE import_staging;               -- PostgreSQL: RESTART IDENTITY eklenebilir
DROP TABLE IF EXISTS old_reports;

Pratik notlar

  • Foreign key ile referans edilen bir tabloya TRUNCATE çoğu veritabanında izin verilmez (PostgreSQL'de CASCADE gerekir).
  • Milyonlarca satırı tek DELETE ile silmek uzun kilitler, büyük transaction log ve replication lag üretir. Batch'ler halinde silin veya zaman bazlı tablolarda partition drop kullanın.
-- PostgreSQL: 10.000'lik batch'lerle silme (döngüyle tekrarlanır)
DELETE FROM events
WHERE id IN (SELECT id FROM events WHERE created_at < '2025-01-01' LIMIT 10000);
  1. INNER JOIN ile LEFT JOIN arasındaki fark nedir?KolayVeritabanı & SQLBackend
  2. Bir tablodaki ikinci en yüksek maaşı bulun.OrtaVeritabanı & SQLBackend
  3. Index nedir? Dezavantajları nelerdir?OrtaVeritabanı & SQLBackend
  4. ACID nedir?OrtaVeritabanı & SQLBackend
  5. Normalizasyon nedir? Ne zaman denormalizasyon yaparsınız?ZorVeritabanı & SQLBackend
  6. N+1 sorgu problemi nedir ve nasıl çözülür?OrtaVeritabanı & SQLBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle