DDL이 잘리는 이유는 무엇입니까?


15

인터뷰 중에 질문 한 인터뷰 질문이 있습니다. 나는 그 질문에 대답했지만 면접관은 내 대답에 그렇게 확신하지 못했습니다. 그래서 누구든지 내 이해로 저를 수정하십시오?

Q. 잘라내 기가 DDL 인 이유 삭제는 DML 인 곳은 어디입니까? 둘 다 거의 동일한 작업을 수행합니다 (행 제거).

답변 잘라내기를 사용할 때 실행 취소 테이블 공간에 저장하지 않고 데이터에 의해 할당 된 전체 공간을 할당 해제합니다. 그러나 삭제의 경우 모든 데이터를 실행 취소 테이블 스페이스에 넣은 다음 모든 데이터를 삭제합니다.

위의 최선의 답변을 아는 사람이 있으면 설명해주세요.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
폴 화이트 9

답변:


14

DML과 DDL의 구별은 이름에서 알 수 있듯이 명확하지 않으므로 상황이 때때로 더러워집니다.

Oracle 은 Concepts Guide에서 DDL 로, DML 명확하게 분류TRUNCATEDELETE 합니다.

TRUNCATE내가 알기로 Oracle의 DDL 캠프에 넣은 주요 요점 은 다음과 같습니다.

  • TRUNCATE스토리지 매개 변수 ( NEXT매개 변수)를 변경할 수 있으며, 이는 DDL 캠프에있는 개체 정의의 일부입니다.
  • TRUNCATE암시 적 commit이며 롤백 (플래시 백 제외)-Oracle의 대부분 (모두?) DDL 작업은이를 수행하며 DML은 수행하지 않습니다.

트리거를 TRUNCATE실행하지 않는다는 사실 ON DELETE은 일반적인 DML 작업과 차별화됩니다 (그러나 일부 직접 경로 DML 작업도 트리거를 건너 뛰므로 명확한 지표는 아닙니다).

DELETEUNDO 를 생성하지만 TRUNCATE그렇지 않은 동일한 문서 참고 사항이 있으므로 귀하의 진술은이 점에서 정확합니다. ( 복원 / 복구의 경우 잘림을 재생할 수 있도록 TRUNCATE일부를 생성합니다 REDO.) 그러나 일부 NOLOGGING작업은 UNDO가 감소 할 수 있으므로 (아무도 확실하지 않음) 내 의견으로는 분명한 지표가 아닙니다.

따라서 다음과 같이 요약합니다.

  • truncate커밋하고 롤백 할 수 없다는 의미에서 "트랜잭션"이 아니며 오브젝트 스토리지 속성을 수정할 수 있습니다. 따라서 일반적인 DML이 아닙니다. Oracle은이를 DDL로 분류합니다.
  • delete 일반적인 DML 문입니다.

테이블을 작성할 때 테이블 공간, 초기 크기, 다음 익스텐트 크기 등과 같은 항목을 지정할 수 있습니다. 이들은 스토리지 속성입니다. 예, 이들은 테이블 (또는 인덱스 또는 파티션) 메타 데이터의 일부입니다.
Mat

SQL 표준은 "데이터 조작"장에서 INSERT, DELETE 및 UPDATE와 함께 TRUNCATE를 나열합니다.
a_horse_with_no_name

2

나는 그것들이 모두 테이블에서 작동 truncate하기 drop때문에 alter, 와 비슷 하다고 생각 create합니다. 즉, 그들은 모두 테이블 레벨 명령입니다. '삭제'는 유사하지만하는 insert, select, update행간에 모든 작업은 모두 행 레벨의 명령입니다 즉있다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.