Tavsiye, 2024

Editörün Seçimi

SQL'de DELETE ve TRUNCATE Arasındaki Fark

DELETE ve TRUNCATE, bir ilişkideki tülleri kaldırmak için kullanılan komutlardır, ancak birçok bağlamda farklıdırlar. SQL'de, DELETE komutu bir Veri İşleme Dili komutu iken, TRUNCATE komutu bir Veri Tanımlama Dili komutudur. Bununla birlikte, DELETE ve TRUNCATE arasında ayrım yapmamıza izin veren nokta, DELETE'nin belirtilen tuple'ları bir ilişkiden kaldırabilmesidir, oysaki, TRUNCATE komutu tüm tupeleri bir ilişkiden kaldırır.

Burada durmamalıyız, DELETE ve TRUNCATE arasında birçok farklılıklar var. Bunları aşağıda gösterilen karşılaştırma tablosu yardımıyla tartışalım.

Karşılaştırma Tablosu

Karşılaştırma TemelleriSİLKIRP
TemelSilmek istediğiniz listeyi belirleyebilirsiniz.Tüm perdeleri bir ilişkiden siler.
DilDELETE bir Veri İşleme Dili komutudur.TRUNCATE bir Veri Tanımlama Dili komutudur.
NEREDEDELETE komutu, WHERE yan tümcesine sahip olabilir.TRUNCATE komutu, WHERE yan tümcesine sahip değil.
tetikDELETE komutu, masaya uygulanan tetiği aktive eder ve ateşlemelerine neden olur.TRUNCATE komutu, tetikleyicileri ateşlemeye başlatmaz.
silmeDELETE komutu, perdeleri tek tek yok eder.TRUNCATE, kayıtları içeren tüm veri sayfasını sil.
KilitDELETE komutu silmeden önce satırı / dizgiyi kilitler.Tablo verilerini silmeden önce TRUNCATE komutu kilit veri sayfası.
hızDELETE komutu, TRUNCATE ile karşılaştırıldığında daha yavaş hareket eder.TRUNCATE, DELETE ile karşılaştırıldığında daha hızlı.
işlemDELETE silinen her bir grup için işlem günlüğünü kaydeder.Silinmiş her veri sayfası için TRUNCATE kayıt işlem günlüğü.
RestoreDELETE komutunu COMMIT veya ROLLBACK ile takip edebilirsiniz.TRUNCATE komutu ROLLBACK olamaz.

DELETE'un tanımı

DELETE bir Veri İşleme Dili (DML) komutudur. DELETE komutunun görevi, bir tablodan ya da bir ilişkiden tülleri silmek ya da kaldırmaktır. DELETE kullanarak, bir ilişkideki tüm nitelik değerleri ile tüm dizgiyi elimine edebiliriz. DELETE, belirli bir özniteliğin değerini, bir tupleın ilişkisinden kaldırmaz.

WHERE yan tümcesini kullanarak bir tablodan silmek istediğiniz kayıtları filtreleyebilirsiniz. DELETE deyiminde WHERE yan tümcesini belirtirseniz, o zaman yalnızca WHERE yan tümcesi koşulunu yerine getiren tüpleri siler. Ancak, DELETE deyiminde WHERE yan tümcesini belirtmezseniz, varsayılan olarak tüm delikleri bir ilişkiden siler veya ortadan kaldırır. DELETE deyimindeki WHERE deyimi yuvalanmış SELECT-FROM-WHERE deyimleri içerebilir.

DELETE komutunun sözdizimi aşağıdaki gibidir:

Table_name öğesinden SİLME NEREDE [ conditon ];

DELETE komutu aynı anda yalnızca tek bir ilişkide veya tabloda çalışır. Tuple'ı farklı ilişkilerden silmek istemeniz durumunda, her biri için farklı bir DELETE komutu yerleştirmeniz gerekir. Ancak, tuple'ı bir ilişkiden silmek, tetikleyicilerin yardımı ile çözülebilecek veritabanının referans bütünlüğünü ihlal edebilir. DELETE komutu başvuru bütünlüğünü ihlal ederse, o zaman tüm başvuru tetikleyicileri (belirtilmişse) silinmiş kayıtlara atıfta bulunan farklı ilişkinin tup'larındaki silme eylemini ilerleten etkinleşir.

DELETE komutu ilk önce silinecek satırı ya da dizgiyi kilitleyin ve ardından dizeyi tek tek silin. Bu nedenle, onu yavaşlatan daha fazla kilit ve kaynak gerektirir. COMET ile DELETE deyimi tarafından yapılan değişiklikleri kalıcı yapabilir veya ROLLBACK kullanarak veritabanını sıfırlayabilirsiniz.

TRUNCATE'un tanımı

TRUNCATE, bir ilişkideki tülleri de sildiği için DELETE komutuna benzer. Aradaki fark, tüm perdeleri bir ilişkiden silmesidir. TRUNCATE komutu yürütüldüğünde, tablodaki tüm veriler silinir, her bir değer, tüm özellik değerleri ile birlikte tablodan elimine edilir. Ancak tablonun yapısı veri tabanında hala mevcuttur. Demek masadaki tülleri tekrar girebilirsiniz. TRUNCATE bir Veri Tanımlama Dili komutudur.

TRUNCATE komutunun sözdizimi aşağıdaki gibidir:

TRUNCATE TABLE tablo_adı ;

DELETE gibi, TRUNCATE de tablo verilerinde satır satır çalışmaz. Bunun yerine, tablo verilerini depolayan veri sayfalarında çalışır. Şimdi, TRUNCATE veri sayfalarını sildiğinde, kilitler yerine veri sayfalarında kilidi almak zorundadır. Bu nedenle, TRUNCATE'i DELETE ile karşılaştırıldığında daha hızlı yapan daha az kilit ve kaynağa gereksinim duyar.

TRUNCATE komutunun yürütülmesi, verileri satır satır çalıştırmadığından hiçbir tetikleyiciyi etkinleştirmez. TRUNCATE, tabloya herhangi bir yabancı anahtar tarafından başvuru yapılması durumunda çalıştırılamaz. TRUNCATE komutu tablo verilerini sildiğinde, asla geri alınamaz.

SQL'de DELETE ile TRUNCATE arasındaki Temel Farklar

  1. DELETE ve TRUNCATE arasındaki temel fark, DELETE kullanarak belirtilen ilişkiyi bir ilişkiden silebilmenizdir. Ancak, TRUNCATE kullanımı, tüm ilişkileri bir ilişkiden siler.
  2. DELETE, DML komutudur, TRUNCATE ise DDL komutudur.
  3. DELETE, silinecek olan kaydı / kayıtları filtrelemek için WHERE yan tümcesini kullanır. Bununla birlikte, TRUNCATE, tüm tüpleri silerken WHERE yan tümcesini gerektirmez, bu nedenle tüpleri filtrelemenize gerek yoktur.
  4. DELETE, tablolara uygulanan referans tetikleyicilerini etkinleştirir. Ancak TRUNCATE, masadaki hiçbir tetikleyiciyi ateşlemez.
  5. DELETE komutu, işlenen sırayla masaları tek tek masadan kaldırır. Bununla birlikte, TRUNCATE tek tek tekerlerde çalışmaz. Bunun yerine, TRUNCATE tablo verilerini depolayan veri sayfasında çalışır.
  6. SİL, silmeden önce zincirdeki kilidi alır, oysa TRUNCATE veri sayfasını silmeden önce veri sayfasındaki kilidi alır.
  7. TRUNCATE, DELETE komutuna göre daha hızlıdır.
  8. SİL her işlem için kayıt işlem günlüğü silerken, her veri sayfası için TRUNCATE kayıt işlem günlüğü silinir.
  9. TRUNCATE'i kullanarak verileri sildiğinizde, asla geri alınamaz, oysa DELETE komutunu kullanarak sildiğiniz verileri geri alabilirsiniz.

Sonuç:

Kayıtların tablodan silinmesini özelleştirmek istiyorsanız, DELETE komutunu kullanabilirsiniz. Eğer tabloyu boşaltmak istiyorsanız, yani bir tablodaki herhangi bir veriyi bırakmak istemiyorsanız, TRUNCATE komutunu kullanın.

Top