본문 바로가기

SQL

오라클 DELETE, TRUNCATE, DROP 차이점 알아보기

 

오라클에서 데이터를 삭제할 때 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된다 = 테이블이 차지하고 있던 저장공간이 반환된다