savepoint란 데이터베이스에서
savepoint를 트랜잭션의 특정 지점을 지정하면 롤백할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 savepoint까지 트랜잭션의 일부만 롤백한다.
따라서 savepoint는 데이터베이스를 이용하는 응용 프로그램에서 복잡한 오류 복구 처리를 실현하는데 효과적이다. 에러가 발생했을 때 savepoint까지의 트랜잭션만 롤백하고 실패한 부분에 대해서만 다시 실행가능하다.
여러개의 savepoint를 정의할 수 있고 동일한 이름으로 정의하면 나중에 정의한 savepoint가 유효하다.
SAVEPOINT name으로 원하는 지점에 이름을 지정한 뒤,
필요할 때 ROLLBACK TO SAVEPOINT name으로 롤백하면 된다.
savepoint는 RELEASE SAVEPOINT name 또는 트랜잭션이 종료될 때 해제된다.
데이터를 전부 삭제하고 사용하고 있던 공간을 반납
테이블의 데이터가 모두 삭제되지만 테이블 자체가 지워지지 않는다.
해당 테이블에 생성되어 있던 인덱스도 함께 truncate 된다.
데이터만 지워지고 쓰던 디스크 상의 공간은 유지되지만 원하는 데이터만 삭제가 가능하다.
데이터와 인덱스 모두 삭제, 컬럼값 유지되지만 특정 데이터만 삭제하는 것이 불가능하다. 그러므로 truncate와 where 조건을 함께 사용할 수 없다.
트랜잭션 로그에 한 번만 기록되므로 delete보다 성능 면에서 더 빠르다.
rollback이 불가능하다.
외래키에 참조되는 테이블에서 실행할 수 없다. 외래키의 무결성을 확인하지 않기 때문이다.
우리는 두려움의 홍수에 버티기 위해서 끊임없이 용기의 둑을 쌓아야 한다. -마틴 루터 킹