티스토리 뷰

반응형

🚀  들어가며...

  • 금일 포스팅에서는 SQL에서 흔히 쓰는 DROP, TRUNCATE, DELETE의 차이점들을 알아보겠습니다!

 

📑 내용

차이점을 서술하기에 앞서 각각의 명령어의 특징을 알아보겠습니다.

 

1) DELETE

- WHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거하는 방식

- WHERE절을 사용하지않고 테이블의 모든 데이터를 삭제하더라도, 내부적으로는 한줄 한줄 일일히 제거하는 과정을 거칩니다.

- 처리속도가 늦고, 퍼포먼스에 좋지않은 영향을 줄 수 있습니다.

- 원하는 데이터만 골라서 삭제할 때에는 DELETE 사용 / 전체 데이터 삭제할 때에는 TRUNCATE 사용합니다.

- 데이터를 삭제하더라도 데이터가 담겨있던 Storage는 Release 되지 않습니다.

- DELETE된 데이터는 COMMIT 명령어를 사용하기 전이라면, ROLLBACK 명령어를 통해 되돌릴 수 있습니다.

DELETE FROM dbtable;
DELETE FROM dbtable WHERE {조건};
ROLLBACK;
COMMIT;

 

2) TRUNCATE

- 전체 데이터를 한번에 삭제하는 방식 ( <-> DELETE)

- 최초 생성되었을 당시의 Storage만 남기고, 데이터가 남겨있던 Storage는 Release 됩니다.

- TRUNCATE TABLE을 하면 CREATE TABLE을 한 직후의 상태와 같습니다.

- 자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없습니다.

TRUNCATE TABLE dbtable;

 

 

3) DROP

- 테이블 자체를 완전히 날려버리는 방식입니다. (처음부터 없었던 테이블처럼)

- 테이블 자체가 모두 지워지며, 해당 테이블에 생성되어있던 모든 인덱스도 사라집니다.

자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없습니다.

- 오라클에서(오라클10g부터)는 테이블이 삭제되는 것이 아니라 윈도우의 휴지통 개념처럼 잠시 삭제 -> 테이블 이름이 BIN$..로 변경됩니다.

DROP TABLE dbtable;

 

한눈에 알아보기 쉽게 표로 정리해 보았습니다. 😀

  DROP TRUNCATE DELETE
종류 DDL DDL (일부 DML 성격) DML
COMMIT AUTO COMMIT AUTO COMMIT 사용자 COMMIT
ROLLBACK 불가능 불가능 COMMIT 이전에 가능
Storage Storage 삭제 (테이블 스키마 삭제) 최초 테이블 생성 시 할당된 Storage만 남기고 삭제 (테이블 스키마 유지) 데이터 모두 DELETE 해도 Storage 삭제X
수행 시 테이블 정의 자체 삭제 테이블을 최소 생성된 초기 상태로 만듬 데이터만 삭제
사용 예제 DROP TABLE STUDENT; TRUNCATE TABLE STUDENT; DELETE FROM STUDENT;
로그 안남김 안남김 남김
속도 빠름 빠름 느림

 


DELETE에 조건(Where)이 없으면 TRUNCATE와 동일하게 모든 데이터가 삭제되고 테이블 스키마만 남는 빈 껍데기 형태가 됩니다.
그러면 속도가 빠른 TRUNCATE 쓰는게 좋겠네? 라고 생각하기 쉽지만
DELETE 명령어는 데이터 복구가 가능하고, 로그를 남기므로, 중점을 어디에 두느냐에 따라 다르게 사용될 수 있습니다.

 

🙋🏻‍♂️ 정리

  • DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어 들지 않습니다. 원하는 데이터만 지울 수 있습니다. 삭제 후 잘못 삭제한 것을 되돌릴 수 있습니다.
  • TRUNCATE 명령어는 용량이 줄어 들고, 인덱스 등도 모두 삭제 됩니다. 테이블은 삭제하지는 않고, 데이터만 삭제한다. 한꺼번에 다 지워야 합니다. 삭제 후 절대 되돌릴 수 없습니다.
  • DROP 명령어는 데이블 전체를 삭제, 공간, 객체를 삭제합니다. 삭제 후 절대 되돌릴 수 없습니다.

 

🔗  참고한 글

https://wikidocs.net/4021

 

6) DELETE, TRUNCATE, DROP 명령어의 차이점

* DELETE, TRUNCATE, DROP 명령어는 모두 삭제하는 명령어이지만 중요한 차이점이 있다. ![](https://wikidocs.net/images/page/4 ...

wikidocs.net

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함