delete는 테이블의 row단위로 데이터를 삭제하는 DML이며, DML의 특성상 롤백이 가능하지만.
truncate, drop 은 테이블 단위로 이루어지는 DDL로, 특성상 복구(Rollback)가 불가능하다.
데이터를 모두 날리는 경우에는, Delete보다 DDL이 빠르고 유리하지만,
테이블의 구조와 스키마는 지우지 않고 남기고 싶을때, Truncate를 사용하며,
테이블의 모든정보를 지울때만, Drop을 사용한다.
[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 }
[TRUNCATE 구문]
TRUNCATE TABLE [ { database_name.[ schema_name ]. | schema_name . } ] table_name [ ; ]
[DROP 구문]
DROP TABLE [ { database_name.[ schema_name ]. | schema_name . } ] table_name [ ; ]
1.Delete
- 데이터만 삭제 되며 테이블 용량은 줄어 들지 않는다. 또한 삭제후 잘못 삭제한 것을 되돌릴 수 있다.
- TABLE이나 CLUSTER에 행이 많으면 행이 삭제될 때마다 많은 SYSTEM 자원이 소모 된다.
- Commit이전에는 Rollback이 가능하다.
- 롤백정보를 기록 하므로 Truncate에 비해서 느리다.
- 전체 또는 일부만 삭제 가능 하다.
- 삭제 행수를 반환 한다.
- 데이터를 모두 Delete해도 사용했던 Storage는 Release 처리 되지 않는다.
2.Truncate - 테이블의 모든 로우를 제거하는 Truncate Table
- 테이블을 최초 생성된 초기상태로 만든다.
- 용량이 줄어들고, 인덱스 등도 모두 삭제 된다.
- Rollback 불가능 하다.
- 무조건 전체 삭제만 가능 하다.
- 삭제 행수를 반환 하지 않는다.
- 테이블이 사용했던 Storage중 최초 테이블 생성시 할당된 Storage만 남기고 Release 처리 된다.
3. Drop table - 테이블 구조를 제거
기존 테이블의 존재를 제한다. (테이블의 정의 자체를 완전히 삭제한다)
Rollback 불가능 하다.
테이블이 사용했던 Storage는 모두 Release 처리 된다.
'Work > DataBase' 카테고리의 다른 글
[SQLD] 조인원리 NL join, Sort-Merge join, Hash Join (0) | 2020.05.29 |
---|---|
[SQLD] 윈도우 함수, 범위 지정 (0) | 2020.05.29 |
[ORACLE] DB dump 백업 및 복구 (export / emport ) (0) | 2020.05.28 |
[SQLD] SQLD 최신 기출 문제 , 요약 , 책 , 사이트 총정리 (29) | 2020.05.15 |
[Oracle] 스키마, 테이블 조회 (2) | 2020.04.27 |