DML과 DDL의 구별은 이름에서 알 수 있듯이 명확하지 않으므로 상황이 때때로 더러워집니다.
Oracle 은 Concepts Guide에서 DDL 로, DML 로 명확하게 분류TRUNCATE
DELETE
합니다.
TRUNCATE
내가 알기로 Oracle의 DDL 캠프에 넣은 주요 요점 은 다음과 같습니다.
TRUNCATE
스토리지 매개 변수 ( NEXT
매개 변수)를 변경할 수 있으며, 이는 DDL 캠프에있는 개체 정의의 일부입니다.
TRUNCATE
암시 적 commit
이며 롤백 (플래시 백 제외)-Oracle의 대부분 (모두?) DDL 작업은이를 수행하며 DML은 수행하지 않습니다.
트리거를 TRUNCATE
실행하지 않는다는 사실 ON DELETE
은 일반적인 DML 작업과 차별화됩니다 (그러나 일부 직접 경로 DML 작업도 트리거를 건너 뛰므로 명확한 지표는 아닙니다).
DELETE
UNDO 를 생성하지만 TRUNCATE
그렇지 않은 동일한 문서 참고 사항이 있으므로 귀하의 진술은이 점에서 정확합니다. ( 복원 / 복구의 경우 잘림을 재생할 수 있도록 TRUNCATE
일부를 생성합니다 REDO
.) 그러나 일부 NOLOGGING
작업은 UNDO가 감소 할 수 있으므로 (아무도 확실하지 않음) 내 의견으로는 분명한 지표가 아닙니다.
따라서 다음과 같이 요약합니다.
truncate
커밋하고 롤백 할 수 없다는 의미에서 "트랜잭션"이 아니며 오브젝트 스토리지 속성을 수정할 수 있습니다. 따라서 일반적인 DML이 아닙니다. Oracle은이를 DDL로 분류합니다.
delete
일반적인 DML 문입니다.