✔ DELETE, TRUNCATE, DROP의 차이
SQLD를 취득한지도 어언 2년이 지나고 실제로 사용하는 쿼리는 SELECT * FROM 테이블명이 다인 나에게 면접 질문으로 'DELETE, TRUNCATE, DROP의 차이'라는 질문이 성큼 다가왔다... 면접에서 탈탈 털리고 작성하는 글...🫠
1. DELETE
DELETE FROM [테이블명];
DELETE FROM [테이블명] WHERE [조건];
- DELETE는 DML로 데이터 조작어이다 -> 즉, 데이터를 삭제한다
- DELETE는 WHERE절과 함께 사용하여 특정 행을 삭제할 수 있다
- 인덱싱 된 VIEW(뷰)와 함께 사용할 수 있다
- DELETE는 삭제된 각 행에 대해 트랜잭션 로그를 기록한다
- TRUNCATE보다 더 많은 트랜잭션 공간을 사용한다
- ROLLBACK(실행 취소) 가능
- 테이블의 용량은 감소하지 않는다
- 테이블 자체를 지우는 것이 아니고 데이터만 삭제하기 때문
2. TRUNCATE
TRUNCATE TABLE [테이블명];
- TRUNCATE는 DDL로 데이터 정의어이다
- TRUNCATE와 WHERE절을 함께 사용할 수 없다
- TRUNCATE는 테이블에서 모든 행을 제거한다
- 트랜잭션 로그에 한 번만 기록되므로 DELETE보다 성능 면에서 더 빠르다
- 인덱싱 된 VIEW(뷰)와 함께 사용할 수 없다
- ROLLBACK(실행 취소) 불가능
- 테이블의 용량이 초기화된다
3. DROP
DROP TABLE [테이블명];
- DROP은 DDL로 데이터 정의어이다
- DROP 명령은 데이터베이스에서 테이블 자체를 제거한다
- 테이블의 행이 제거될때, DML(데이터 조작 명령어) 트리거가 실행되지 않는다
- ROLLBACK(실행 취소) 불가능
정리

| 명령어 | DELETE | TRUNCATE | DROP |
|---|
| 종류 | DML | DDL | DDL |
| 기능 | 특정 조건에 맞는 행 삭제 | 테이블의 모든 데이터 삭제 | 테이블 자체 및 데이터 삭제 |
| 테이블 구조 변화 | 유지됨 (데이터만 삭제) | 유지됨 (데이터만 삭제) | 완전히 삭제됨 |
| 롤백 가능 여부 | 가능 (트랜잭션에 포함된 경우) | 불가능 | 불가능 |
| 트랜잭션 영향 | 트랜잭션에 포함될 수 있음 | 트랜잭션에 포함될 수 없음 | 트랜잭션에 포함될 수 없음 |
| 속도 | 상대적으로 느림 | 상대적으로 빠름 | 상대적으로 빠름 |