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 Temelleri | SİL | KIRP |
---|---|---|
Temel | Silmek istediğiniz listeyi belirleyebilirsiniz. | Tüm perdeleri bir ilişkiden siler. |
Dil | DELETE bir Veri İşleme Dili komutudur. | TRUNCATE bir Veri Tanımlama Dili komutudur. |
NEREDE | DELETE komutu, WHERE yan tümcesine sahip olabilir. | TRUNCATE komutu, WHERE yan tümcesine sahip değil. |
tetik | DELETE komutu, masaya uygulanan tetiği aktive eder ve ateşlemelerine neden olur. | TRUNCATE komutu, tetikleyicileri ateşlemeye başlatmaz. |
silme | DELETE komutu, perdeleri tek tek yok eder. | TRUNCATE, kayıtları içeren tüm veri sayfasını sil. |
Kilit | DELETE komutu silmeden önce satırı / dizgiyi kilitler. | Tablo verilerini silmeden önce TRUNCATE komutu kilit veri sayfası. |
hız | DELETE 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şlem | DELETE 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üğü. |
Restore | DELETE 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
- 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.
- DELETE, DML komutudur, TRUNCATE ise DDL komutudur.
- 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.
- DELETE, tablolara uygulanan referans tetikleyicilerini etkinleştirir. Ancak TRUNCATE, masadaki hiçbir tetikleyiciyi ateşlemez.
- 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.
- SİL, silmeden önce zincirdeki kilidi alır, oysa TRUNCATE veri sayfasını silmeden önce veri sayfasındaki kilidi alır.
- TRUNCATE, DELETE komutuna göre daha hızlıdır.
- 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.
- 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.