새소식

300x250
3. Database/Oracle 기본

[Oracle] Delete, Truncate, Drop 비교

  • -
728x90


[Oracle] Delete, Truncate, Drop 비교

 

 구분

테이블 정의 

저장공간 

작업속도 

SQL문 종류 구분 

 DELETE

존재 

유지 

느림 

DML 

 TRUNCATE

존재

 반납

빠름

 DDL

 DROP

삭제

 반납

 빠름

 DDL

 

 

테이블의 데이터를 삭제 처리 할때 Delete,Truncate를 이용한다.
눈으로 보기에는 Delete, Truncate와 별도 차이점 없이 둘다 데이터가 삭제 되는 것으로 생각 될 수 도 있지만
Delete,Truncate 각각 처리되는 과정과 결과가 틀린 큰 차이점이 존재 한다.

 

 

[TRUNCATE 구문]

TRUNCATE TABLE [ { database_name.[ schema_name ]. | schema_name . } ] table_name [ ; ]

 

 

[DELETE 구문]

 [ WITH <common_table_expression> [ ,...n ] ]
 DELETE [ TOP ( expression ) [ PERCENT ] ] [ FROM ] { <object> | rowset_function_limited  [ WITH ( <table_hint_limited> [ ...n ] ) ] }
     [ <OUTPUT Clause> ]
     [ FROM <table_source> [ ,...n ] ]
     [ WHERE { <search_condition> | { [ CURRENT OF  { [ GLOBAL ] cursor_name }  | cursor_variable_name } ] } } ]
     [ OPTION ( <Query Hint> [ ,...n ] ) ] [; ]
 <object> ::=
 { [ server_name.database_name.schema_name. | database_name. [ schema_name ] .  | schema_name. ] table_or_view_name }

 

 

1.Delete
- 데이터만 삭제 되며 테이블 용량은 줄어 들지 않는다. 또한 삭제후 잘못 삭제한 것을 되돌릴 수 있다.

- TABLE이나 CLUSTER에 행이 많으면 행이 삭제될 때마다 많은 SYSTEM 자원이 소모 된다.
- Commit이전에는 Rollback이 가능하다.
- 롤백정보를 기록 하므로 Truncate에 비해서 느리다.
- 전체 또는 일부만 삭제 가능 하다.
- 삭제 행수를 반환 한다.
- 데이터를 모두 Delete해도 사용했던 StorageRelease 처리 되지 않는다.

 

 

2.Truncate - 테이블의 모든 로우를 제거하는 Truncate Table
- 테이블을 최초 생성된 초기상태로 만든다.
- 용량이 줄어들고, 인덱스 등도 모두 삭제 된다.
- Rollback 불가능 하다.
- 무조건 전체 삭제만 가능 하다.
- 삭제 행수를 반환 하지 않는다.
- 테이블이 사용했던 Storage중 최초 테이블 생성시 할당된 Storage만 남기고 Release 처리 된다.

 

 

3. Drop table - 테이블 구조를 제거
기존 테이블의 존재를 제한다. (테이블의 정의 자체를 완전히 삭제한다)
Rollback 불가능 하다.
테이블이 사용했던 Storage는 모두 Release 처리 된다.

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.