기본 문법 및 특징
DELETE
DELETE FROM table_name [WHERE condition];
주요 특징:
- 행(Row) 단위 삭제
- WHERE 절을 통한 조건부 삭제 가능
- 트랜잭션 내에서 롤백 가능
- 각 행 삭제마다 트랜잭션 로그 기록
TRUNCATE
TRUNCATE TABLE table_name;
주요 특징:
- 테이블 전체 데이터 일괄 삭제
- WHERE 절 사용 불가
- 자동 커밋으로 롤백 불가
- 단일 트랜잭션 로그 기록
DELETE는 데이터를 행 단위로 개별적으로 삭제하며, 각 삭제 작업마다 트랜잭션 로그를 기록한다. WHERE 절을 사용하여 특정 조건의 데이터만 선택적으로 삭제할 수 있고, 트랜잭션 내에서 실행되므로 필요한 경우 롤백이 가능하다.
반면 TRUNCATE는 테이블의 데이터를 한 번에 일괄 삭제하는 방식으로, 단 한 번의 트랜잭션 로그만 기록하여 처리 속도가 빠르지만, WHERE 절을 사용할 수 없고 자동으로 커밋되어 롤백이 불가능하다.
언제 무엇을 사용해야 할까?
DELETE는 데이터의 세밀한 제어가 필요한 상황에서 주로 사용된다. 특정 조건의 데이터만 삭제해야 하거나, 삭제 작업의 롤백 가능성이 있는 경우, 또는 트리거나 외래 키와 같은 연관 데이터 처리가 필요한 경우에 DELETE를 선택해야 한다. 예를 들어, 고객 주문 데이터에서 특정 기간의 주문만 삭제하거나, 삭제 작업 중 문제가 발생할 경우를 대비해 롤백 가능성을 열어두어야 하는 상황이 이에 해당한다.
반면, TRUNCATE는 전체 데이터를 빠르게 삭제해야 하는 상황에서 효과적이다. 테이블의 모든 데이터를 초기화하거나, 대용량 데이터를 효율적으로 제거해야 할 때 TRUNCATE를 사용한다. 특히 개발이나 테스트 환경에서 테이블을 초기 상태로 되돌리거나, AUTO_INCREMENT 값을 리셋해야 할 때 유용하다. 또한, TRUNCATE는 단일 트랜잭션 로그만 기록하므로 시스템 리소스 사용이 효율적이며, 대용량 데이터 처리 시 DELETE보다 훨씬 빠른 성능을 보여준다.
핵심 차이점 정리
구분 | DELETE | TRUNCATE |
명령어 유형 | DML (Data Manipulation Language) | DDL (Data Definition Language) |
실행 속도 | 행 단위 삭제로 상대적으로 느림 | 테이블 전체 삭제로 DELETE보다 **** 빠름 |
WHERE 절 | 사용 가능 | 사용 불가 |
트랜잭션 | 롤백 가능 | 롤백 불가 (즉시 커밋) |
AUTO_INCREMENT | 유지됨 | 초기화됨 |
트리거 | 실행됨 | 실행되지 않음 |
참고
'Databases' 카테고리의 다른 글
수직적 탐색 수평적 탐색 (0) | 2025.02.21 |
---|---|
NL 조인 (0) | 2025.02.07 |
바인드 변수를 사용하는 이유 (0) | 2025.01.12 |
뷰(View)의 개념과 뷰(View)를 사용해야 하는 이유 (2) | 2024.12.06 |
인덱스란? (0) | 2024.09.06 |