Tengo una pregunta de entrevista, que se hizo durante mi entrevista. Respondí la pregunta, pero el entrevistador no estaba tan convencido con mi respuesta. Entonces, ¿alguien me corrige con mi comprensión?
Q. ¿Por qué Truncar es DDL Donde como Eliminar es DML? Ambos hacen casi el mismo trabajo (eliminar filas)
Resp. Cuando estamos usando Truncate, estamos desasignando todo el espacio asignado por los datos sin guardar en el espacio de deshacer tabla. Pero, en el caso de Eliminar, estamos poniendo todos los datos en el espacio de tabla de deshacer y luego estamos eliminando todos los datos.
Por favor, si alguien sabe la mejor respuesta para lo anterior, explique.

Respuestas:
La distinción entre DML y DDL no es tan clara como implican sus nombres, por lo que a veces las cosas se ponen un poco turbias.
Oracle claramente clasifica
TRUNCATEcomo DDL en la Guía de conceptos, peroDELETEcomo DML.Los puntos principales que ponen
TRUNCATEen el campamento DDL en Oracle, según tengo entendido, son:TRUNCATEpuede cambiar los parámetros de almacenamiento (elNEXTparámetro), y esos son parte de la definición del objeto, eso está en el campamento DDL.TRUNCATEhace un implícitocommity no se puede revertir (flashback aparte): la mayoría (¿todas?) de las operaciones DDL en Oracle hacen esto, no lo hace DML.El hecho de que
TRUNCATEno ejecuteON DELETEdisparadores también lo distingue de las operaciones normales de DML (pero algunas operaciones directas de DML de ruta directa también omiten los disparadores, por lo que no es un indicador claro).Esa misma documentación señala que
DELETEgenera UNDO, peroTRUNCATEno lo hace, por lo que su declaración es correcta a este respecto. (Tenga en cuenta queTRUNCATEgenera algoREDOpara que el truncamiento pueda reproducirse en caso de restauración / recuperación). Pero algunasNOLOGGINGoperaciones también pueden producir un UNDO reducido (no estoy seguro de nada), por lo que en mi opinión tampoco es un indicador claro.Entonces lo resumiría como:
truncateno es "transaccional" en el sentido de que se compromete y no se puede revertir, y puede modificar los atributos de almacenamiento de objetos. Por lo tanto, no es un DML ordinario: Oracle lo clasifica como DDL.deletees una declaración DML ordinaria.fuente
Creo que
truncatees similar adrop,alter,createya que todo el trabajo sobre una mesa, es decir que todos ellos son comandos a nivel de tabla. Mientras 'delete' es similar ainsert,select,updatecomo todo el trabajo en una de las filas, es decir, que todos ellos son comandos de nivel de fila.fuente