Mengapa DDL terpotong?


15

Saya memiliki pertanyaan wawancara, yang ditanyakan selama wawancara saya. Saya menjawab pertanyaan itu, tetapi pewawancara tidak begitu yakin dengan jawaban saya. Jadi, siapa pun tolong perbaiki saya dengan pemahaman saya?

Q. Mengapa Truncate adalah DDL Dimana Delete adalah DML? Keduanya melakukan pekerjaan yang hampir sama (menghapus baris)

Ans. Ketika kita menggunakan Truncate, kita mendelegasikan seluruh ruang yang dialokasikan oleh data tanpa menyimpan ke dalam undo-table-space. Tetapi, dalam kasus Hapus, kami menempatkan semua data ke dalam ruang-ruang tabel dan kemudian kami menghapus semua data.

Tolong, jika ada yang tahu jawaban terbaik untuk hal di atas, mohon jelaskan.


Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Paul White 9

Jawaban:


14

Perbedaan DML versus DDL tidak sejelas yang tersirat dari namanya, sehingga terkadang ada hal-hal yang sedikit berlumpur.

Oracle jelas diklasifikasikan TRUNCATEsebagai DDL dalam Concepts Guide, tetapi DELETEsebagai DML.

Poin utama yang dimasukkan ke TRUNCATEdalam kamp DDL di Oracle, seperti yang saya pahami, adalah:

  • TRUNCATEdapat mengubah parameter penyimpanan ( NEXTparameter), dan itu adalah bagian dari definisi objek - yang ada di camp DDL.
  • TRUNCATEmelakukan implisit commit, dan tidak dapat dibatalkan (flashback samping) - sebagian besar (semua?) operasi DDL di Oracle melakukan ini, tidak ada DML yang melakukannya.

Fakta itu TRUNCATEtidak berjalanON DELETE pemicu juga membedakannya dari operasi DML normal (tetapi beberapa operasi jalur langsung DML juga melewatkan pemicu, jadi itu bukan indikator yang jelas).

Dokumentasi yang sama mencatat bahwa DELETEmenghasilkan UNDO, tetapi TRUNCATEtidak, jadi pernyataan Anda benar dalam hal ini. (Catatan yang TRUNCATEmemang menghasilkan beberapa REDOsehingga pemotongan dapat diputar ulang jika terjadi pemulihan / pemulihan.) Tetapi beberapaNOLOGGING operasi juga dapat menghasilkan UNDO berkurang (tidak yakin tentang tidak sama sekali), jadi itu bukan indikator yang jelas baik menurut saya.

Jadi saya akan menjumlahkannya sebagai:

  • truncatebukan "transaksional" dalam arti bahwa ia melakukan dan tidak dapat dibatalkan, dan dapat memodifikasi atribut penyimpanan objek. Jadi itu bukan DML biasa - Oracle mengklasifikasikannya sebagai DDL.
  • delete adalah pernyataan DML biasa.

Saat Anda membuat tabel, Anda bisa menentukan hal-hal seperti apa tablespace itu masuk, ukuran awal, ukuran tingkat berikutnya, dll. Itu adalah atribut penyimpanan. Ya, mereka adalah bagian dari metadata tabel (atau indeks, atau partisi).
Mat

Perhatikan bahwa standar SQL mencantumkan TRUNCATE di bab "Manipulasi data" bersama dengan INSERT, DELETE, dan UPDATE.
a_horse_with_no_name

2

Saya berpikir bahwa truncateini mirip dengan drop, alter, createkarena mereka semua bekerja pada meja yaitu mereka semua adalah perintah tingkat meja. Sementara 'delete' ini mirip dengan insert, select, updatesebagai semua pekerjaan pada baris yaitu mereka semua adalah perintah tingkat baris.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.