본문 바로가기
프로그래밍/MySQL

📊 [SQL] 제41장 DELETE(3) - DELETE와 TRUNCATE, DROP은 무엇이 다를까요?

by 강릉바다의 블로그 2026. 7. 21.

제41장. DELETE (3)

"DELETE와 TRUNCATE, DROP은 무엇이 다를까요?"


학습 목표

이번 장을 학습하면 다음 내용을 할 수 있습니다.

  • CRUD의 의미를 설명할 수 있다.
  • DELETE, TRUNCATE, DROP의 차이를 설명할 수 있다.
  • 상황에 맞는 삭제 명령을 선택할 수 있다.
  • 데이터와 테이블의 차이를 이해할 수 있다.

지금까지 배운 SQL를 돌아봅시다.

우리는 지금까지 데이터베이스에서 가장 중요한 네 가지 작업을 모두 배웠습니다.

기능 SQL 설명
Create INSERT 새로운 데이터를 추가한다.
Read SELECT 데이터를 조회한다.
Update UPDATE 기존 데이터를 수정한다.
Delete DELETE 데이터를 삭제한다.

이 네 가지 기능을 묶어서

CRUD(Create, Read, Update, Delete)

라고 합니다.

웹 프로그램, 모바일 앱, 업무 프로그램 등 거의 모든 데이터베이스 프로그램은 이 CRUD 기능을 중심으로 동작합니다.


그런데 삭제에도 여러 종류가 있습니다.

지금까지는 DELETE만 배웠습니다.

하지만 MySQL에는 데이터를 없애는 방법이 세 가지 있습니다.

  • DELETE
  • TRUNCATE
  • DROP

이름은 비슷하지만 역할은 완전히 다릅니다.


비유로 먼저 이해해 봅시다.

학교에서 학생 명단이 적힌 공책이 있다고 생각해 봅시다.

DELETE

학생 이름만 지웁니다.

공책은 그대로 남아 있습니다.


TRUNCATE

학생 이름을 모두 한 번에 지웁니다.

공책은 그대로 남아 있습니다.

새 학년이 되어 다시 사용할 수 있습니다.


DROP

공책 자체를 버립니다.

학생 명단뿐 아니라

공책 자체가 없어집니다.

다시 사용하려면 새 공책을 만들어야 합니다.


DELETE

행(Row)을 선택해서 삭제합니다.

DELETE FROM Customers
WHERE Country='Germany';

필요한 데이터만 삭제할 수 있습니다.


DELETE 결과

테이블
남아 있음
↓
일부 데이터 삭제

TRUNCATE

모든 데이터를 한 번에 삭제합니다.

TRUNCATE TABLE Customers;

WHERE를 사용할 수 없습니다.

모든 행이 한 번에 삭제됩니다.


TRUNCATE 결과

테이블
남아 있음
↓
모든 데이터 삭제

DROP

테이블 자체를 삭제합니다.

DROP TABLE Customers;

데이터뿐 아니라

테이블 구조도 함께 사라집니다.


DROP 결과

테이블 자체 삭제
↓
테이블 없음

그림으로 이해하기

DELETE

Customers
 ├─ 고객1
 ├─ 고객2
 ├─ 고객3

↓

고객2 삭제

Customers
 ├─ 고객1
 ├─ 고객3

TRUNCATE

Customers
 ├─ 고객1
 ├─ 고객2
 ├─ 고객3

↓

Customers
 (비어 있음)

DROP

Customers
↓
테이블 자체가 사라짐

세 명령의 차이

명령 데이터 테이블 구조 WHERE 사용
DELETE 일부 또는 전체 삭제 남아 있음 가능
TRUNCATE 전체 삭제 남아 있음 불가능
DROP 모두 삭제 삭제됨 불가능

언제 사용할까요?

DELETE

특정 데이터만 삭제할 때

예)

탈퇴 회원 삭제

주문 취소

오래된 로그 일부 삭제


TRUNCATE

테이블은 유지하면서

모든 데이터를 비울 때

예)

실습용 데이터 초기화

시험 전 데이터 정리


DROP

테이블 자체가 더 이상 필요 없을 때

예)

실험용 테이블 제거

잘못 만든 테이블 삭제


많이 하는 실수

실수 ①

DELETE와 DROP을 혼동한다.

DROP을 실행하면

데이터뿐 아니라

테이블도 사라집니다.


실수 ②

TRUNCATE에서 WHERE를 사용하려고 한다.

TRUNCATE TABLE Customers
WHERE Country='Germany';

이 문장은 사용할 수 없습니다.

TRUNCATE는

항상 전체 데이터를 삭제합니다.


실수 ③

DROP 후 SELECT를 실행한다.

SELECT *
FROM Customers;

이미 테이블이 삭제되었기 때문에

오류가 발생합니다.


실무에서는?

실무에서는 세 명령을 목적에 따라 구분해서 사용합니다.

  • 회원 한 명 삭제 → DELETE
  • 로그 전체 초기화 → TRUNCATE
  • 테스트용 테이블 제거 → DROP

명령의 이름은 비슷하지만 영향 범위는 매우 다르므로, 실행 전에 어떤 대상이 삭제되는지 반드시 확인하는 습관이 중요합니다.


한눈에 정리

명령 삭제 대상 테이블 유지
DELETE 일부 또는 전체 데이터 O
TRUNCATE 모든 데이터 O
DROP 테이블 자체 X

이번 장 핵심 정리

✅ CRUD는 Create, Read, Update, Delete의 약자이다.

✅ DELETE는 원하는 데이터만 삭제할 수 있다.

✅ TRUNCATE는 모든 데이터를 한 번에 삭제한다.

✅ DROP은 테이블 자체를 삭제한다.

✅ 삭제 명령은 목적에 맞게 선택해야 한다.


연습 문제

기본 문제

① Customers 테이블의 모든 데이터를 삭제하지만 테이블은 남겨 두려면 어떤 명령을 사용해야 하는가?

② Customers 테이블 자체를 삭제하려면 어떤 명령을 사용해야 하는가?


응용 문제

다음 상황에서 사용할 명령을 쓰시오.

① 회원 한 명의 정보를 삭제한다.

② 시험용 데이터를 모두 비운다.

③ 더 이상 사용하지 않는 테이블을 삭제한다.


도전 문제

다음 세 명령의 차이를 설명하시오.

DELETE FROM Customers;
TRUNCATE TABLE Customers;
DROP TABLE Customers;

정답

기본 문제

TRUNCATE TABLE Customers;
DROP TABLE Customers;

💡 실무 이야기

초보 개발자는 DELETE, TRUNCATE, DROP을 모두 "삭제하는 명령" 정도로 생각하기 쉽습니다. 하지만 실무에서는 이 차이를 정확히 이해하는 것이 매우 중요합니다.

예를 들어 운영 중인 데이터베이스에서 DROP TABLE Orders;를 잘못 실행하면 주문 데이터뿐 아니라 테이블 구조 자체가 사라져 프로그램이 정상적으로 동작하지 않을 수 있습니다.

반대로 실습 환경에서는 TRUNCATE를 사용하면 테이블 구조는 유지한 채 데이터를 빠르게 초기화할 수 있어 매우 편리합니다.

즉, 무엇을 삭제할 것인지(데이터만인지, 테이블 자체인지)를 먼저 생각한 뒤 명령을 선택하는 습관이 좋은 개발자의 기본입니다.


✨ 다음 장 예고

다음 장에서는 VIEW를 배워 보겠습니다.

복잡한 SELECT 문을 매번 다시 작성하지 않고, 가상의 테이블처럼 저장해 두고 사용하는 방법을 익히게 됩니다.

데이터를 복사하지 않고도 필요한 결과를 손쉽게 조회할 수 있는 매우 유용한 기능입니다.