DELETE와 TRUNCATE의 차이점, 언제 어떤 걸 써야 할까?
SQL을 다루다 보면 테이블의 데이터를 한꺼번에 삭제해야 하는 경우가 많다. 가장 대표적인 방법이 바로 DELETE와 TRUNCATE인데, 겉으로 보기에는 비슷하지만 작동 방식과 성능 면에서 큰 차이가 있다. 초보 개발자라면 어떤 상황에서 어느 것을 써야 하는지 헷갈릴 수밖에 없다. 이번 글에서는 DELETE와 TRUNCATE의 차이를 정확히 짚어보고, 언제 어떤 명령어를 사용하는 것이 좋은지 살펴보겠다.
1. DELETE: 데이터만 삭제, 구조는 유지
DELETE는 테이블에서 특정 조건에 맞는 데이터를 삭제하는 SQL 명령어다. 모든 데이터를 삭제하고 싶다면 다음과 같이 사용할 수 있다.
DELETE FROM almember;
이 명령어는 테이블의 모든 데이터를 지우지만, 테이블의 구조(컬럼, 제약 조건 등)는 그대로 유지된다. 또, 자동 증가(AUTO_INCREMENT) 값은 초기화되지 않는다. 즉, 이후 데이터를 다시 삽입하면 기존의 AUTO_INCREMENT 값 다음 번호부터 시작한다.
DELETE의 특징
- WHERE 절을 사용할 수 있어 특정 조건에 맞는 데이터만 삭제 가능
- 테이블의 구조 및 인덱스는 그대로 유지
- AUTO_INCREMENT 값은 초기화되지 않음
- 트랜잭션을 지원하여 ROLLBACK이 가능 (InnoDB에서만)
- 데이터 삭제 후에도 테이블 크기가 줄어들지 않음
DELETE 사용 예시
만약 특정 회원만 삭제하려면 WHERE 절을 사용하면 된다.
DELETE FROM almember WHERE id = 10;
2. TRUNCATE: 테이블을 통째로 비우는 강력한 명령어
TRUNCATE는 테이블의 모든 데이터를 한 번에 삭제하는 명령어다. DELETE와 달리 조건을 지정할 수 없고, 실행하면 테이블의 모든 행이 즉시 삭제된다.
TRUNCATE TABLE almember;
이 명령어를 실행하면 almember 테이블의 모든 데이터가 삭제되며, AUTO_INCREMENT 값도 초기화된다. 즉, 새로운 데이터를 삽입하면 다시 1부터 시작하게 된다.
TRUNCATE의 특징
- 테이블의 모든 데이터를 즉시 삭제
- WHERE 절을 사용할 수 없음
- AUTO_INCREMENT 값이 초기화됨
- 트랜잭션을 지원하지 않음 (ROLLBACK 불가능)
- 속도가 빠름 (DELETE보다 성능이 뛰어남)
- 테이블의 구조와 인덱스는 유지됨
TRUNCATE 사용 예시
테이블을 완전히 초기화하고 싶을 때 다음과 같이 실행하면 된다.
TRUNCATE TABLE almember;
3. DELETE vs TRUNCATE 비교
두 명령어의 차이를 한눈에 보기 쉽게 정리했다.
구분 DELETE TRUNCATE
삭제 대상 | 특정 조건의 행만 삭제 가능 | 테이블 전체 데이터 삭제 |
WHERE 절 사용 가능 여부 | 가능 | 불가능 |
AUTO_INCREMENT 초기화 여부 | 초기화되지 않음 | 초기화됨 |
트랜잭션 지원 | 가능 (InnoDB) | 불가능 |
속도 | 느림 (로그 저장됨) | 빠름 (로그 저장 안 됨) |
ROLLBACK 가능 여부 | 가능 (InnoDB) | 불가능 |
4. DELETE와 TRUNCATE 중 어떤 걸 써야 할까?
두 명령어를 적절하게 활용하려면 아래 기준을 참고하면 된다.
- 일부 데이터만 삭제해야 한다면?
→ DELETE 사용 (WHERE 조건을 활용 가능) - 테이블을 완전히 초기화해야 한다면?
→ TRUNCATE 사용 (속도가 빠르고 AUTO_INCREMENT 값도 초기화됨) - 트랜잭션을 지원하는 데이터 삭제가 필요한 경우?
→ DELETE 사용 (ROLLBACK 가능) - 테이블 크기가 커서 성능이 중요한 경우?
→ TRUNCATE 사용 (DELETE보다 빠름)
SQL에서 데이터를 삭제하는 것은 단순한 작업처럼 보일 수 있지만, 실제로는 성능과 데이터 무결성까지 고려해야 하는 중요한 작업이다. DELETE와 TRUNCATE의 차이를 확실히 이해하고, 프로젝트 상황에 맞게 적절한 명령어를 사용하자.
#SQL #DELETE #TRUNCATE #데이터삭제 #DB관리 #SQL쿼리 #MySQL #데이터베이스 #개발자팁 #SQL최적화