truncate 명령어는 테이블의 모든 데이터를 삭제하는 명령어입니다.
delete의 경우는 행이 삭제 될 때마다 많은 자원이 소모되고 트리거가 걸려있다면 행이 삭제될 때마다 실행된다.
이전에 할당되었던 영역은 삭제되어 빈 테이블이나 클러스터에 그대로 남아있게 된다. -> 데이터 잔여물이 남게된다.
truncate는 비교적 빠르게 데이터 삭제가 가능하며 해당 삭제에 대해서 어떤 롤백 정보도 만들지 않고 바로 커밋한다. 즉, 롤백이 불가능하다는 뜻
또한 truncate는 트리거나 무결성 제약에 영향을 주지 않는다.
delete와 다르게 행을 삭제 할 때마다 트리거가 실행되지 않는다.
-- test_table 테이블에 자동적으로 시퀀스 (자동증가 값)를 재시작한다.
truncate table test_table restart identity;
-- restart 와는 달리 test_table의 시퀀스 값은 리셋하지 않고 데이터만 삭제한다.
truncate table test_table continue identity;
-- test_table의 데이터를 모두 삭제하면 만약 test_table에 연결된 데이터들이 있다면 모두 삭제한다. (외래키로 연결된 데이터들)
truncate table test_table cascade;
-- test_table에 연결된 데이터가 하나라도 있다면 데이터를 삭젷지 않는다.
-- cascade와는 상반되는 역할을 수행합니다.
truncate table test_table restrict;