Oracle에서 용도에 따른 SQL문의 분류 및
Delete와 Truncate 의 특징에 대해 정리해보겠습니다.
명령어의 분류
| 종류 | 내용 |
| DDL(데이터 정의어) | 테이블 생성과 조작. CREATE, ALTER, DROP, RENAME |
| DML(데이터 조작어) | 데이터의 조작. SELECT, INSERT, UPDATE, DELETE |
| DCL(데이터 제어어) | 유저를 생성하고 권한을 제어하는 명령어. GRANT, REVOKE |
| TCL(트랜잭션 제어어) | 트랜잭션(Transaction)을 제어하는 명령어. |
DDL과 DML 비교
- DDL(CREATE, ALTER, RENAME, DROP)은 실행 시점에 암묵적 커밋(Implicit Commit)이 발생한다. 따라서 일반적으로 ROLLBACK으로 되돌릴 수 없다.
- DML(INSERT, UPDATE, DELETE)은 트랜잭션 단위로 처리된다. COMMIT을 해야 변경이 영구 반영되고, ROLLBACK으로 변경을 취소할 수 있다(COMMIT 전 변경은 보통 본인 세션에서만 보이고, 다른 세션에는 보이지 않는다).
DELETE 와 TRUNCATE 비교

| DELETE | TRUNCATE | |
| 성격 | DML(데이터 조작) | DDL(객체 조작에 가까운 초기화) |
| ROLLBACK | 가능(COMMIT 전) | 불가(DDL 특성상 암묵적 커밋 발생) |
| 삭제 범위 | 원하는 특정 행(Row)를 지울 수 있다(WHERE로 일부 행 삭제 가능) | 전체 행만 삭제(WHERE 불가하기 때문에, 특정 행(Row) 지울 수 없음) |
| 성능/부하 | 행 단위로 삭제되므로 데이터가 많을수록 시간이 오래 걸릴 수 있음(Undo/Redo 부담 증가) | 테이블을 “비우는” 방식이라 일반적으로 DELETE보다 빠르고 부하가 적은 편 |
| 공간(용량) | 데이터는 삭제되지만 할당된 공간이 즉시 줄지 않을 수 있음. ※ 이유: DELETE는 "칸을 비우는 것"에 가깝다. 즉, 데이터를 지워도 테이블이 쓰던 자리(공간)는 그대로 남아 다음 INSERT에서 다시 재사용한다. 그래서 "데이터는 줄었는데, 테이블이 차지하는 용량은 그대로"처럼 보일 수 있다. |
옵션에 따라 공간을 반환하거나 유지할 수 있음(예: REUSE STORAGE 등) ※ 이유: TRUNCATE는 테이블을 "초기화"하는 명령이다. 필요하면 공간을 되돌려(반환) 더 작게 만들 수도 있고, 반대로 다시 쓸 공간을 남겨둘 수도 있다(옵션/상황에 따라). |
| 인덱스 | 인덱스 정의는 유지되며, 삭제된 행에 따라 인덱스도 함께 정리됨 | 인덱스가 삭제되지는 않는다. 테이블을 비우면 인덱스도 "비워진 상태" 즉, 삭제가 된다 |
반응형
'Database' 카테고리의 다른 글
| 식별자(Identifiers) & 비식별자 비교 정리 (0) | 2020.09.11 |
|---|---|
| 트랜잭션의 특성(Commit, Rollback, Savepoint) (0) | 2020.09.10 |
| 정규화/반정규화/파티셔닝으로 보는 데이터 모델링과 성능 (0) | 2020.09.08 |
| [Oracle] 기본 개념 및 자료형, NULL 관련 정리 (0) | 2020.09.07 |
| 데이터 모델링의 3요소 및 엔티티, 속성의 분류 (0) | 2020.09.07 |