Delete/ Truncate/ Drop 는 언제, 어떤 상황에서 써야 하는지 한 번 정리해봤다
🔍 MySQL 에서 테이블이나 데이터를 삭제할 때, 어떤 명령어를 써야 할까?
MySQL에서 데이터를 삭제할 수 있는 대표적인 명령어로는 DELETE, TRUNCATE, DROP 이 있다
이 명령어들은 모두 데이터를 제거한다는 공통점이 있지만,
작동 방식, 성능, 롤백 가능 여부, 테이블 구조 유지 여부 등에서 큰 차이를 보인다
DELETE 명령어
DELETE는 특정 조건에 맞는 행 row 만 삭제할 수 있는 SQL 명령어이다
조건 없이 사용하면 테이블의 모든 데이터를 삭제하지만, 테이블 구조는 그대로 유지된다
또한 트랜잭션을 지원하므로, ROLLBACK 으로 복구할 수 있다
DELETE 사용 예시
-- 나이가 18세 미만인 사용자만 삭제
DELETE FROM users WHERE age < 18;
-- 전체 데이터 삭제
DELETE FROM users;
DELETE 사용 실무 팁
삭제 시간이 오래 걸릴 수 있다 (특히 수천만 건 이상일 때)
WHERE 절 없이 DELETE 를 사용하면 성능이 떨어지고, 락이 길게 유지될 수 있다
외래 키 제약 조건이 있는 경우 관련된 다른 테이블의 데이터도 함께 삭제될 수 있으므로 주의해야 한다
TRUNCATE 명령어
TRUNCATE 는 테이블의 모든 데이터를 조건 없이 삭제한다
속도는 DELETE 보다 훨씬 빠르며, 자동 증가 값 AUTO_INCREMENT 도 초기화된다
일부 DBMS(MySQL 등)에서는 트랜잭션을 지원하지 않기 때문에 ROLLBACK 이 불가능한 경우가 많다
TRUNCATE 사용 예시
-- users 테이블의 모든 데이터를 빠르게 삭제
TRUNCATE TABLE users;
TRUNCATE 사용 실무 팁
TRUNCATE 는 내부적으로 테이블을 재생성하는 방식이라 매우 빠르다
WHERE 절을 사용할 수 없으며, 특정 조건에 따라 일부만 삭제하는 용도로는 부적합하다
외래 키 Foreign Key 제약 조건이 있는 경우, 제약 조건을 제거하지 않으면 사용이 제한된다
DROP 명령어
DROP 은 테이블 전체를 삭제한다
데이터 + 테이블 구조 + 제약 조건 + 인덱스 전부 제거되며, 이 작업은 복구가 불가능하다
테이블을 완전히 없애고 싶을 때 사용한다
DROP 사용 예시
-- users 테이블 자체를 삭제
DROP TABLE users;
DROP 사용 실무 팁
실수로 DROP 을 실행하면 테이블 자체가 사라지므로, 항상 백업 확인 후 실행해야 한다
스키마 변경 작업 시 DROP 을 사용하고 다시 CREATE TABLE 하는 경우도 많지만, 위험성이 크다
버전 관리가 안 되는 DB 에서는 DROP 사용을 피하는 것이 좋다
명령어 비교 요약표
| 구분 | DELETE | TRUNCATE | DROP |
| 대상 | 일부 or 전체 행 (row) 삭제 | 전체 행 (row) 삭제 | 테이블 자체 삭제 |
| 조건 사용 | 가능 (WHERE) | 불가능 | 불가능 |
| 속도 | 느림 | 빠름 | 매우 빠름 |
| ROLLBACK | 가능 | MySQL 은 불가 (DBMS에 따라 다름) |
불가능 |
| 테이블 구조 | 유지 | 유지 (초기화됨) | 삭제됨 |
| AUTO_INCREMENT | 유지 | 초기화됨 | 초기화됨 (테이블 제거) |
DELETE, TRUNCATE, DROP 은 모두 "데이터를 없앤다" 는 점에서는 같지만,
정확한 사용 목적, 속도, 복구 가능 여부 등을 고려해서 상황에 맞게 선택해야 한다
💡 추천 사용 시나리오:
- 일부 데이터 삭제 → DELETE
- 전체 데이터 초기화 (테이블은 유지) → TRUNCATE
- 테이블 구조 자체 제거 → DROP
'TIL > 용어' 카테고리의 다른 글
| [TIL] 딥러닝과 스마트 인프라 (0) | 2025.06.26 |
|---|---|
| [TIL] SQL 에서의 NULL (1) | 2025.06.19 |
| [TIL] False Positive/ False Negative (1) | 2025.06.17 |
| Servlet 서블릿 (1) | 2025.02.13 |
| Embedded Tomcat 내장 톰캣 (1) | 2025.02.12 |