DROP, DELETE, TRUNCATE 차이 정리 | 데이터 삭제 명령어 구분하기

SQL에서 데이터를 “삭제”할 때 가장 많이 헷갈리는 명령어가 DROP, DELETE, TRUNCATE다.

셋 다 지우는 명령어지만, 지우는 대상(구조 vs 데이터)과 범위(일부 vs 전체)가 완전히 다르다. 이 차이를 모르고 사용하면 테이블 자체를 날려버리는 사고가 발생할 수 있다.


한 번에 구분하기

DELETE    → 데이터 일부/전체 삭제 (조건 가능)
TRUNCATE  → 데이터 전체 삭제 (테이블 구조 유지)
DROP      → 테이블 자체 삭제 (구조까지 삭제)

DELETE | 조건으로 일부 데이터 삭제

DELETE는 테이블 안의 데이터를 지우는 명령어다.WHERE 조건을 사용해서 특정 행만 삭제할 수 있다.

-- 특정 회원 한 명 삭제
DELETE FROM users
WHERE id = 1;

WHERE를 생략하면 모든 데이터가 삭제된다.

-- 전체 데이터 삭제 (위험)
DELETE FROM users;

특징

  • 특정 데이터만 선택적으로 삭제 가능
  • 트랜잭션/롤백(환경에 따라)으로 복구 가능
  • 조건을 잘못 쓰면 대량 삭제 사고 발생

TRUNCATE | 데이터만 전체 초기화

TRUNCATE는 테이블 구조는 유지하고 데이터만 전체 삭제한다. 일종의 “초기화” 명령이다.

TRUNCATE TABLE users;

특징

  • 모든 데이터 즉시 삭제 (WHERE 불가)
  • 테이블 구조는 그대로 유지
  • 보통 DELETE보다 빠름(대량 데이터 초기화)
  • 롤백이 제한적이거나 불가한 경우 많음

👉 테스트 데이터 리셋할 때 많이 사용


DROP | 테이블 자체 삭제

DROP은 테이블 자체를 삭제한다. 데이터뿐 아니라 구조(컬럼, 인덱스 등)까지 전부 사라진다.

DROP TABLE users;

특징

  • 테이블 + 데이터 모두 삭제
  • 되돌리기 매우 어려움
  • 가장 위험한 명령어

상황별 사용 기준

같은 “삭제”라도 상황에 따라 선택이 달라진다.

회원 한 명 탈퇴        → DELETE
테스트 데이터 초기화   → TRUNCATE
더 이상 안 쓰는 테이블 → DROP

SQL 코드 비교

-- DELETE (조건 삭제)
DELETE FROM users WHERE id = 1;

-- DELETE (전체 삭제)
DELETE FROM users;

-- TRUNCATE (전체 초기화)
TRUNCATE TABLE users;

-- DROP (테이블 삭제)
DROP TABLE users;

실수 방지 체크포인트

1. DELETE는 WHERE 조건 확인

DELETE FROM users;

👉 전체 삭제됨 (실수 1위)


2. DROP은 구조까지 삭제

DROP TABLE users;

👉 테이블 자체가 사라짐 (복구 어려움)


3. TRUNCATE는 되돌리기 어렵다

TRUNCATE TABLE users;

👉 빠르지만 롤백 제한


4. 운영 DB에서는 항상 백업 먼저

삭제 명령어 실행 전 → 백업 or 확인 필수

핵심 차이 한 번 더 정리

명령어 대상 범위 특징

DELETE 데이터 일부/전체 WHERE 가능
TRUNCATE 데이터 전체 빠른 초기화
DROP 테이블 전체 구조까지 삭제

DELETE는 데이터를 지우고, TRUNCATE는 테이블을 초기화하며, DROP은 테이블 자체를 삭제한다.