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, tetapi DELETE
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 implisit commit
, 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, tetapi TRUNCATE
tidak, jadi pernyataan Anda benar dalam hal ini. (Catatan yang TRUNCATE
memang menghasilkan beberapa REDO
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.