
데이터를 삭제해야 하는 상황에서 DELETE와 TRUNCATE중 어떤 명령을 사용해야 할지 고민한 적이 있을 것입니다.
두 명령 모두 테이블의 데이터를 삭제하는 기능을 하지만, 동작 방식과 특징은 크게 다릅니다.
특히 ROLLBACK 가능 여부, WHERE 절 사용, 수행 속도 등에서 차이가 있기 때문에 상황에 맞는 명령을 선택하는 것이 중요합니다.
이번 글에서는 Oracle의 DELETE와 TRUNCATE의 차이점과 각각 언제 사용하는 것이 적합한지 정리해보겠습니다.
DELETE란?
DELETE는 테이블의 데이터를 삭제하는 DML 명령입니다.
가장 큰 특징은 원하는 데이터만 선택해서 삭제할 수 있다는 점입니다.
예를 들어 특정 사원만 삭제하려면 다음과 같이 사용할 수 있습니다.
DELETE FROM EMP
WHERE EMPNO = 1001;
테이블의 모든 데이터를 삭제하는 것도 가능합니다.
DELETE FROM EMP;
다만 DELETE는 데이터를 한 행씩 삭제하기 때문에 삭제 대상이 많을수록 시간이 오래 걸릴 수 있습니다.
또한 COMMIT하기 전이라면 ROLLBACK을 통해 삭제 내용을 되돌릴 수 있습니다.
TRUNCATE란?
TRUNCATE는 테이블의 모든 데이터를 한 번에 삭제하는 DDL 명령입니다.
사용 방법은 매우 간단합니다.
TRUNCATE TABLE EMP;
TRUNCATE는 전체 데이터를 빠르게 삭제하는 데 적합하지만, 일부 데이터만 삭제하는 것은 불가능합니다.
또한 실행과 동시에 커밋되므로 일반적으로 ROLLBACK할 수 없습니다.
DELETE와 TRUNCATE 차이점
| 항목 | DELETE | TRUNCATE |
|---|---|---|
| 명령 종류 | DML | DDL |
| WHERE 사용 | 가능 | 불가능 |
| 일부 데이터 삭제 | 가능 | 불가능 |
| 전체 데이터 삭제 | 가능 | 가능 |
| ROLLBACK | 가능(COMMIT 전) | 불가능 |
| AUTO COMMIT | 실행 후 COMMIT 필요 | 실행 즉시 COMMIT |
| 삭제 속도 | 상대적으로 느림 | 상대적으로 빠름 |
| Trigger 실행 | 실행 | 실행되지 않음 |
언제 DELETE를 사용할까?
다음과 같은 경우에는 DELETE가 적합합니다.
- 특정 데이터만 삭제해야 하는 경우
- 삭제 후 복구 가능성이 있는 경우
- 운영 데이터에서 조건을 지정하여 삭제해야 하는 경우
예를 들어 퇴사한 직원 정보만 삭제한다면 다음과 같이 사용할 수 있습니다.
DELETE FROM EMP
WHERE STATUS = '퇴사';
언제 TRUNCATE를 사용할까?
TRUNCATE는 테이블 전체 데이터를 빠르게 초기화해야 하는 경우에 적합합니다.
예를 들면 다음과 같습니다.
- 테스트 데이터 초기화
- 임시 테이블 비우기
- 개발 환경에서 데이터 초기화
TRUNCATE TABLE TEMP_DATA;
전체 데이터를 빠르게 삭제해야 한다면 DELETE보다 효율적인 선택이 될 수 있습니다.
작업 시 주의할 점
TRUNCATE는 실행과 동시에 커밋되므로 일반적으로 ROLLBACK할 수 없습니다.
따라서 운영 환경에서는 실행 전에 삭제 대상과 영향 범위를 충분히 확인하는 것이 중요합니다.
반면 DELETE는 COMMIT하기 전까지 ROLLBACK이 가능하기 때문에 복구 가능성을 고려해야 하는 작업에 적합합니다.
요약
DELETE와 TRUNCATE는 모두 데이터를 삭제하는 명령이지만 목적이 다릅니다.
- 일부 데이터만 삭제하거나 복구 가능성이 필요한 경우에는 DELETE
- 테이블 전체 데이터를 빠르게 초기화해야 하는 경우에는 TRUNCATE
두 명령의 차이를 이해하고 상황에 맞게 사용하는 것이 중요합니다.
자주 묻는 질문(FAQ)
Q. DELETE와 TRUNCATE 중 어느 것이 더 빠른가요?
일반적으로 TRUNCATE가 더 빠릅니다. DELETE는 데이터를 한 행씩 삭제하지만, TRUNCATE는 테이블 전체를 한 번에 초기화하는 방식으로 동작하기 때문입니다.
Q. TRUNCATE는 ROLLBACK이 가능한가요?
아닙니다. TRUNCATE는 DDL 명령으로 실행과 동시에 커밋되므로 일반적으로 ROLLBACK할 수 없습니다.
Q. DELETE는 ROLLBACK이 가능한가요?
가능합니다. COMMIT 하기 전이라면 ROLLBACK을 통해 삭제 내용을 되돌릴 수 있습니다.
Q. WHERE 절을 사용할 수 있는 명령은 무엇인가요?
WHERE 절은 DELETE에서만 사용할 수 있습니다. TRUNCATE는 테이블 전체 데이터를 삭제하는 명령이므로 WHERE절을 사용할 수 없습니다.
함께 보면 좋은 Oracle 글
