1) truncate로 데이터를 삭제하면 영구적으로 삭제 처리된다.
데이터를 삭제할 때는 delete문 외에도 truncate문을 사용한다.
두 명령어의 차이점은 delete는 DML(데이터 조작어)이고,
truncate는 DDL(데이터 정의/관리어)이라는 점이다.
delete문으로 데이터를 삭제한 후에는 commit을 실행해야 데이터가
삭제된 상태가 반영되고, delete문으로 데이터를 삭제한 후에
이어서 rollback을 실행하면 삭제된 데이터가 다시 복원된다.
하지만 truncate문으로 데이터를 삭제할 경우에는 따로 commit을
실행하지 않아도 영구적으로 데이터가 삭제되며,
rollback을 실행해도 삭제된 데이터가 복구되지 않는다.
따라서 매우 신중하게 사용해야 한다.
2) truncate로 데이터를 삭제하면 테이블의 전체 튜플이 삭제된다.
truncate문에는 where 조건을 붙일 수 없기 때문에
해당 테이블의 특정 데이터만 삭제할 수 없다.
그런 이유로 truncate문을 실행할 경우에는
해당 테이블에 있는 전체 튜플이 삭제된다.
* 해당 테이블은 삭제되지 않는다.
아래 예시를 통해 확인해보자.
테스트를 위해 테이블 example을 생성하고 전체 튜플을 조회했다.
이후 truncate문을 실행하였고,
다시 테이블 example의 모든 튜플을 조회해 보았더니
해당 테이블은 여전히 조회가 가능하지만,
테이블의 모든 튜플이 삭제된 것을 확인할 수 있다.
혹시나.... 하고 rollback을 실행하고 롤백이 완료되었다고 표시되었지만,,
다시 테이블 example을 조회해보니 삭제된 튜플들은 복구되지 않았고,
모든 튜플이 삭제된 상태임을 다시 확인했다.
'DB > SQL - Oracle' 카테고리의 다른 글
[SQL] 인덱스(INDEX)의 종류와 생성, 변경, 삭제, 조회 방법 (0) | 2024.02.13 |
---|---|
[SQL] 연산자 - 수식, 문자, 논리, 집합 연산자 (0) | 2024.02.09 |
[SQL] 기본 집계 함수 - min, max, variance, stddev (0) | 2024.02.07 |
[SQL] 기본 집계 함수 - count, sum, avg (0) | 2024.02.07 |
[SQL] 숫자 데이터 타입 (1) number (0) | 2024.02.06 |