DB/Oracle
[Oracle] DELETE, TRUNCATE, DROP 차이점
코딩 수달
2022. 12. 4. 16:26
반응형
DELETE, TRUNCATE, DROP의 차이점이 은근 헷갈려서 차이점에 대해서 정리해보려고 한다.
DELETE
- WHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거하는 방식
- WHERE절을 사용하지않고 테이블의 모든 데이터를 삭제하더라도, 내부적으로는 한줄 한줄 일일히 제거하는 과정을 거침
- 처리속도가 늦고, 퍼포먼스에 좋지않은 영향을 줄 수 있음
- 원하는 데이터만 골라서 삭제할 때에는 DELETE 사용 / 전체 데이터 삭제할 때에는 TRUNCATE 사용
- 데이터를 삭제하더라도 데이터가 담겨있던 Storage는 Release 되지않는다.
- DELETE된 데이터는 COMMIT 명령어를 사용하기 전이라면, ROLLBACK 명령어를 통해 되돌릴 수 있다.
DELETE FROM Atable;
DELETE FROM Atable WHERE {조건};
ROLLBACK;
COMMIT;
TRUNCATE
- 전체 데이터를 한번에 삭제하는 방식 (DELETE 와는 반대)
- 최조 생성되었을 당시의 Storage만 남기고, 데이터가 남겨있던 Storage는 Release 된다.
- TRUNCATE TABLE을 하면 CREATE TABLE을 한 직후의 상태와 같다.
- 자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없다.
TRUNCATE TABLE Atable
DROP
- 테이블 자체를 완전히 날려버리는 방식 (처음부터 없었던 테이블로 만드는 방식)
- 테이블 자체가 모두 지워지며, 해당 테이블에 생성되어있던 모든 인덱스도 사라진다.
- 자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없다.
- 오라클 10g부터는 테이블이 삭제되는 것이 아니라 윈도우의 휴지통 개념처럼 잠시 삭제
DROP TABLE Atable
DELETE | TRUNCATE | DROP | |
명령어 종류 | DML | DDL | DDL |
처리 속도 | 느림 | 빠름 | 빠름 |
COMMIT | 사용자가 직접 | 자동 | 자동 |
ROLLBACK 가능 여부 | commit 이전엔 가능 | 불가 | 불가 |
삭제 방식 | 데이터만 삭제 | 테이블을 create 상태로 되돌림 | 테이블까지 완전히 제거 |
반응형