오라클에서 데이터를 삭제할 때 DELETE, TRUNCATE, DROP을 사용한다.
비슷한 것 같지만 3개의 구현 방법은 전부 다르다.
DELETE
데이터는 지워지지만 테이블 용량은 그대로이다. 전체 또는 일부만 선택해서 삭제하는 것이 가능하며 COMMIT 이전에는 ROLLBACK이 가능하다. UNDO를 위한 데이터를 생성하기 때문에 TRUNCATE에 비해서 속도가 느리다.
TRUNCATE
TRUNCATE는 데이터를 전체 삭제하는 명령어이다. DELETE처럼 일부만 삭제하는 것은 불가능하고 무조건 전체 데이터를 삭제한다.
이때 주의할 점은 데이터와 인덱스만 삭제되고 테이블은 삭제되지 않는다는 점이다. 그렇기 때문에 TRUNCATE 명령어를 실행하고 나면 컬럼만 남아서 테이블이 처음 만들어졌을 때의 상태로 돌아간다.
삭제 후 ROLLBACK은 불가능하다.
DROP
DROP은 테이블 전체를 삭제하는 명령어이다. 테이블의 정의 자체를 삭제하는 명령어로 테이블이 사용했던 storage는 모두 release처리한다. DROP도 TRUNCATE와 마찬가지로 삭제 후 롤백이 불가능하다.
DELETE | TRUNCATE | DROP | |
종류 | DML(데이터조작어) | DDL(데이터정의어) | DDL(데이터정의어) |
롤백 | 롤백 가능 | 롤백 불가능 | 롤백 불가능 |
commit | 사용자 Commit | Auto Commit | Auto Commit |
동작 방법 | 데이터만 삭제 | 테이블을 초기 상태로 만듦 | 테이블 자체를 완전 삭제 |
저장공간 | 데이터를 모두 delete해도 사용했던 storage는 release되지 않음 |
테이블이 사용했던 storage 중 최초 테이블 생성 시 할당된 storage만 남기고 release |
테이블이 사용했던 storage를 모두 release |
속도 | 느림 | 빠름 | 빠름 |
*storage가 release된다 = 테이블이 차지하고 있던 저장공간이 반환된다
'SQL' 카테고리의 다른 글
윈도우함수(WINDOW FUNCTION) 총정리, 순위함수와 분석함수 (0) | 2021.08.23 |
---|---|
외부 조인) LEFT JOIN, RIGHT JOIN, FULL JOIN 차이 알아보기 (1) | 2021.08.18 |
SQL CREATE TABLE로 테이블 생성하기 및 PK / FK 등 제약 조건 알아보기 (0) | 2021.08.14 |
SQL 집계함수 - ROLLUP, CUBE, GROUPING SETS (3) | 2021.08.12 |
SQL 유저라면 반드시 알아야 할 SQL 명령어 총정리 (0) | 2021.08.10 |