티스토리 뷰

반응형

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 중 어떤 걸 써야 할까?

두 명령어를 적절하게 활용하려면 아래 기준을 참고하면 된다.

  1. 일부 데이터만 삭제해야 한다면?
    → DELETE 사용 (WHERE 조건을 활용 가능)
  2. 테이블을 완전히 초기화해야 한다면?
    → TRUNCATE 사용 (속도가 빠르고 AUTO_INCREMENT 값도 초기화됨)
  3. 트랜잭션을 지원하는 데이터 삭제가 필요한 경우?
    → DELETE 사용 (ROLLBACK 가능)
  4. 테이블 크기가 커서 성능이 중요한 경우?
    → TRUNCATE 사용 (DELETE보다 빠름)

SQL에서 데이터를 삭제하는 것은 단순한 작업처럼 보일 수 있지만, 실제로는 성능과 데이터 무결성까지 고려해야 하는 중요한 작업이다. DELETE와 TRUNCATE의 차이를 확실히 이해하고, 프로젝트 상황에 맞게 적절한 명령어를 사용하자.

 

#SQL #DELETE #TRUNCATE #데이터삭제 #DB관리 #SQL쿼리 #MySQL #데이터베이스 #개발자팁 #SQL최적화

반응형
댓글