savepoint를 지정하면 롤백할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 savepoint까지 트랜잭션의 일부만 롤백한다.
롤백 -> 변경된 데이터를 테이블에 영구적으로 저장하려면 commit을 해줘야 하는데 이 commit 작업 전에 실행되어 변경 사항을 취소하는 것
따라서 복잡한 대규모 트랜잭션에서 에러가 발생했을 때 Savepoint까지의 트랜잭션만 롤백하고 실패한 부분에 대해서만 다시 실행가능하다.
여러개의 savepoint를 정의할 수 있고 동일한 이름으로 정의하면 나중에 정의한 savepoint가 유효하다.
(hoon93.tistory.com/24 에서 이미지 발췌하였습니다.)
savepoint 정의 방법 -> SAVEPOINT A; (A라는 savepoint 지정)
'ROLLBACK TO A' 실행 -> savepoint A를 실행한 시점까지 롤백 실행.
개념 : 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납
즉, truncate와 일반적으로 알고 있는 delete 모두 삭제하는 명령어이다.
delete -> 데이터만 지워지고 쓰던 디스크 상의 공간은 유지
truncate -> 데이터와 인덱스 모두 삭제, 컬럼값 유지
DELETE -> 원하는 데이터만 삭제 가능
TRUNCATE -> 특정 데이터만 삭제 불가