DB/SQL - Oracle

[SQL] DDL(데이터 정의어) - truncate

생각많은 프로그래머 2024. 2. 8. 21:12
SQL 종류
1. 데이터를 정의하는 쿼리 - DDL(데이터 정의어) : create, drop, alter, truncate 
2. 데이터를 조작하는 쿼리 - DML(데이터 조작어) : insert, select, update, delete
3. 데이터를 제어하는 쿼리 - DCL(데이터 제어어) : grant, revoke
4. 트랜잭션 제어하는 쿼리 - TCL(트랜잭션 제어어) : commit, rollback, checkpoint 

 

 

DDL 특징 요약
-  create :  테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성
- drop : 생성된 데이터베이스 객체를 영구히 삭제
- alter : 이미 생성된 데이터베이스 객체를 수정
- truncate : 테이블이나 클러스터의 데이터를 통째로 삭제
 
 
데이터 관리어  : truncate

 

1) truncate로 데이터를 삭제하면 영구적으로 삭제 처리된다.

 

데이터를 삭제할 때는 delete문 외에도 truncate문을 사용한다.

두 명령어의 차이점은 delete는 DML(데이터 조작어)이고,

truncate는 DDL(데이터 정의/관리어)이라는 점이다.

 

delete문으로 데이터를 삭제한 후에는 commit을 실행해야 데이터가

삭제된 상태가 반영되고, delete문으로 데이터를 삭제한 후에

이어서 rollback을 실행하면 삭제된 데이터가 다시 복원된다.

 

하지만  truncate문으로 데이터를 삭제할 경우에는 따로 commit을

실행하지 않아도 영구적으로 데이터가 삭제되며, 

rollback을 실행해도 삭제된 데이터가 복구되지 않는다.

따라서 매우 신중하게 사용해야 한다.

 

2) truncate로 데이터를 삭제하면 테이블의 전체 튜플이 삭제된다.

 

truncate문에는 where 조건을 붙일 수 없기 때문에

해당 테이블의 특정 데이터만 삭제할 수 없다.

그런 이유로 truncate문을 실행할 경우에는

해당 테이블에 있는 전체 튜플이 삭제된다.

* 해당 테이블은 삭제되지 않는다.

 

아래 예시를 통해 확인해보자.

테스트를 위해 테이블 example을 생성하고 전체 튜플을 조회했다.

테이블 example

 

이후 truncate문을 실행하였고,

truncate 실행

 

 

다시 테이블 example의 모든 튜플을 조회해 보았더니

해당 테이블은 여전히 조회가 가능하지만,

테이블의 모든 튜플이 삭제된 것을 확인할 수 있다.

테이블 example 다시 조회

 

혹시나.... 하고 rollback을 실행하고 롤백이 완료되었다고 표시되었지만,,

다시 테이블 example을 조회해보니 삭제된 튜플들은 복구되지 않았고,

모든 튜플이 삭제된 상태임을 다시 확인했다.

롤백 실행
테이블 example 다시다시 조회