bkz: SQL Server Truncate Table işlemi Nedir?
SQL Server'da DELETE komutu daha yaygın olarak kullanılsa da tabloların tüm içeriğini temizlemek için TRUNCATE komutu da yine faydalı bir alternatif. Bir tablonun tüm satırlarını silmek için (bkz: SQL Server'da bir tabloyu temizlemek) hem DELETE hem de TRUNCATE kullanılabiliyorsa peki bu iki komut arasında ne fark var diye merak edenler için kısa ve faydalı bir yazı hazırladım.
Örnek olarak yazılar tablosundan tüm satırları silen aşağıdaki gibi iki SQL komutunu ele alalım.
DELETE FROM yazilar;
TRUNCATE TABLE yazilar;
- DELETE komutlarında where ifadesi ile silinecek satırlar seçilebilir, TRUNCATE komutunda ise where ifadesi kullanılmaz ve amacı bir tablonun içinin tamamen silinmesidir
- DELETE komutunda da TRUNCATE komutunda da hatalı veri silme işlemleri için rollback uygulamak mümkündür (BEGIN TRANSACTION ve ROLLBACK TRANSACTION kullanarak)
- DELETE komutu işlem kayıtlarının tutulduğu transaction log'a her bir silme işlemi için bir kayıt ekler, TRUNCATE komutu ise tüm satırların silinmesi için tek bir satır bilgi ekler. DELETE komutunun transaction log'da her bir satır için yeni bir bilgi eklediği düşünülürse alan gereksinimi de daha fazla olacaktır.
- DELETE komutu, tablolardaki tek tek ya da belirli aralıklarda/şartlarda satırları silmek için daha uygundur. TRUNCATE komutu ise bir tablonun tüm satırlarını silmek için daha uygundur
- Hem DELETE komutu, hem de TRUNCATE komutu birer DDL (Data Description Language) komutudur.
- TRUNCATE komutu tabloya ait istatistikleri de sıfırlar.
- Hem DELETE komutunda, hem de TRUNCATE komutunda tablo ile ilgili sütun, index, sabit ve schema bilgileri silinmez. Sadece veriler (satırlar) silinir.
- DELETE komutunda her bir satır teker teker silindiği için trigger kullanmak mümkündür, TRUNCATE komutunda ise trigger çalışmaz.
- Bir SQL tablosunun tüm satırlarının silinmesi işleminde TRUNCATE komutu DELETE komutuna göre daha hızlı tamamlanır.
- DELETE komutu, tablonun identity sütununun seed değerini değiştirmez (bkz: SQL Server'da tablonun mevcut seed değerini görmek), TRUNCATE komutu ise tablonun seed değerini resetler.
- index'lenmiş görünümlerde DELETE komutu kullanılabilir ancak TRUNCATE komutu kullanılamaz.
Editör editi: sitedeki bazı diğer benzer yazılar için;
bkz: Sql Server'da Select yaparak Delete sorgusu yazmak
bkz: Sql Server'da Temp Tabloyu (Geçici Tablo) Drop Etmek
bkz: SQL Server'da tüm trigger'ları listelemek