Kesik DDL neden?


15

Görüşme sırasında sorulan bir görüşme sorum var. Soruyu cevapladım, ancak görüşmeci cevabımla pek ikna olmadı. Yani, lütfen beni anlayışımla düzelten biri var mı?

S. Neden DDL Kesildi Sil DML olduğu için nerede? Her ikisi de neredeyse aynı işi yapıyor (satırları kaldırmak)

Ans. Truncate'i kullandığımızda, veriler tarafından ayrılan alanın tamamını geri alma boşluğuna kaydetmeden ayırırız. Ancak, Sil durumunda, tüm verileri geri tablo alanına koyuyoruz ve sonra tüm verileri siliyoruz.

Lütfen, yukarıdakiler için en iyi cevabı bilen biri varsa, lütfen açıklayın.


Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
Paul White 9

Yanıtlar:


14

DDL'ye karşı DDL ayrımının isimleri ima ettiği kadar net değil, bu yüzden bazen işler biraz çamurlu oluyor.

Oracle , Kavramlar Kılavuzu'nda açıkça DDL , ancak DML olarak sınıflandırırTRUNCATEDELETE .

TRUNCATEAnladığım kadarıyla, Oracle'daki DDL kampına katılan ana noktalar şunlardır:

  • TRUNCATEdepolama parametrelerini ( NEXTparametre) değiştirebilir ve bunlar nesne tanımının bir parçasıdır - bu DDL kampındadır.
  • TRUNCATEörtük yapar commitve geri alınamaz (flashback kenara) - Oracle'daki çoğu (tümü?) DDL işlemleri bunu yapar, hiçbir DML yapmaz.

Tetikleyicilerin TRUNCATEçalışmadığı gerçeği ON DELETEde normal DML işlemlerinden ayırır (ancak bazı doğrudan yol DML işlemleri de tetikleyicileri atlar, bu nedenle bu açık bir gösterge değildir).

Aynı dokümantasyon DELETEUNDO'yu oluşturan fakat TRUNCATEyapmayan notları da içerir , bu nedenle ifadeniz bu açıdan doğrudur. ( Geri yükleme / kurtarma durumunda kesmenin yeniden oynatılabilmesi için TRUNCATEbazılarını ürettiğini unutmayın REDO.) Ancak bazı NOLOGGINGişlemler de azaltılmış UNDO üretebilir (hiçbirinden emin değilim), bu da bence net bir gösterge değil.

Bu yüzden şöyle özetleyeceğim:

  • truncatetaahhüt ettiği ve geri alınamayacağı ve nesne depolama özniteliklerini değiştirebileceği anlamında "işlemsel" değildir. Bu yüzden sıradan bir DML değil - Oracle onu DDL olarak sınıflandırır.
  • delete sıradan bir DML ifadesidir.

Bir tablo oluşturduğunuzda, hangi tablo alanına girdiği, başlangıç ​​boyutu, sonraki boyut boyutu gibi şeyleri belirtebilirsiniz. Bunlar depolama öznitelikleridir. Evet, bunlar tablonun (veya dizinin veya bölümün) meta verilerinin bir parçasıdır.
Mat

SQL standardının INSERT, DELETE ve UPDATE ile birlikte "Veri işleme" bölümünde TRUNCATE listelediğini unutmayın.
a_horse_with_no_name

2

Ben düşünüyorum truncatebenzer drop, alter, createhepsi masa seviyesi komutlardır yani bir tablo üzerinde onlar gibi tüm işleri. 'Delete' benzer olsa da hiç insert, select, updatebir satırda bütün iş hepsi satır seviyesi komutlardır yani olarak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.