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.
Jawaban:
Perbedaan DML versus DDL tidak sejelas yang tersirat dari namanya, sehingga terkadang ada hal-hal yang sedikit berlumpur.
Oracle jelas diklasifikasikan
TRUNCATE
sebagai DDL dalam Concepts Guide, tetapiDELETE
sebagai DML.Poin utama yang dimasukkan ke
TRUNCATE
dalam kamp DDL di Oracle, seperti yang saya pahami, adalah:TRUNCATE
dapat mengubah parameter penyimpanan (NEXT
parameter), dan itu adalah bagian dari definisi objek - yang ada di camp DDL.TRUNCATE
melakukan implisitcommit
, dan tidak dapat dibatalkan (flashback samping) - sebagian besar (semua?) operasi DDL di Oracle melakukan ini, tidak ada DML yang melakukannya.Fakta itu
TRUNCATE
tidak 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
DELETE
menghasilkan UNDO, tetapiTRUNCATE
tidak, jadi pernyataan Anda benar dalam hal ini. (Catatan yangTRUNCATE
memang menghasilkan beberapaREDO
sehingga 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:
truncate
bukan "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.sumber
Saya berpikir bahwa
truncate
ini mirip dengandrop
,alter
,create
karena mereka semua bekerja pada meja yaitu mereka semua adalah perintah tingkat meja. Sementara 'delete' ini mirip denganinsert
,select
,update
sebagai semua pekerjaan pada baris yaitu mereka semua adalah perintah tingkat baris.sumber