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.
| DELETE | TRUNCATE | DROP | |
|---|---|---|---|
| Komut türü | DML | DDL | DDL |
| WHERE | Var | Yok | Yok |
| Hız (büyük tablo) | Yavaş, satır satır loglar | Çok hızlı, veri sayfalarını serbest bırakır | Hızlı |
| Trigger | Satır trigger'ları çalışır | Satır trigger'ları çalışmaz | Çalışmaz |
| Auto increment | Devam eder | Genelde sıfırlanır | Tablo yok |
| Rollback | Transaction içinde mümkün | PostgreSQL ve SQL Server'da mümkün, MySQL'de implicit commit | PostgreSQL'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'deCASCADEgerekir). - Milyonlarca satırı tek
DELETEile 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);İlgili Veritabanı & SQL soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.