5.00 / 1 oy

SQL'de Truncate ile Delete Komutu Arasındaki Farklar Nelerdir?

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

kaanbey

20.08.2021 09:22

Bu soru henüz yanıtlanmamış.

Bu soruya sadece kayıtlı kullanıcılar yanıt yazabilirler. Yanıt yazmak için lütfen giriş yapınız.

Reitix
SQL'de Truncate ile Delete Komutu Arasındaki Farklar Nelerdir?

İnternet sitemizdeki deneyiminizi iyileştirmek için çerezler kullanıyoruz. Bu siteye giriş yaparak çerez kullanımını kabul etmiş sayılıyorsunuz. Daha fazla bilgi.