TIL/용어

[TIL] Delete/ Truncate/ Drop 차이 w/ MySQL

아람2 2025. 6. 18. 18:54
반응형

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