📊 [SQL] 제41장 DELETE(3) - DELETE와 TRUNCATE, DROP은 무엇이 다를까요?
제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 문을 매번 다시 작성하지 않고, 가상의 테이블처럼 저장해 두고 사용하는 방법을 익히게 됩니다.
데이터를 복사하지 않고도 필요한 결과를 손쉽게 조회할 수 있는 매우 유용한 기능입니다.