[DB] SAVEPOINT& TRUNCATE

emz·2022년 8월 1일
0

SAVEPOINT

rollback을 시킬 때 그 시점은 트랜잭션이 실행되기 이전 시점이다. 따라서 중간 지점으로 rollback을 하고 싶을 경우가 생긴다. 이를 위해 사용하는 것이 savepoint이다. 여러 개의 savepoint를 정의할 수 있고, 동일한 이름으로 정의하면 나중에 정의한 savepoint가 유효하다.

특징

  • savepoint는 하위 트랜잭션을 실현하기 위한 데이터베이스 언어 SQL 구문 중 하나이다.
  • 트랜잭션의 특정 지점에 이름을 지정하고, 그 지점 이전에 수행 한 작업에 영향을 주지 않고 그 지점 이후에 수행한 작업을 롤백(rollback)할 수 있다.
  • savepoint는 데이터베이스를 이용하는 응용 프로그램에서 복잡한 오류 복구 처리를 실현하는데 효과적이다. 여러 문이 갖춰진 트랜잭션 도중에 에러가 발생했을 경우, savepoint를 사용하면 전체 트랜잭션을 롤백하지 않고 오류에서 복귀할 수 있다.
  • SAVEPOINT name으로 원하는 지점에 이름을 지정하고 ROLLBACK TO SAVEPOINT name으로 롤백하면 된다.
  • savepoint는 RELEASE SAVEPOINT name 또는 트랜잭션이 종료될 때 해제된다.



TRUNCATE

truncate는 DDL(데이터 정의어) 명령어로, 특정 테이블의 모든 데이터를 삭제한다. 데이터만 삭제하므로 테이블 구조에는 영향을 주지 않는다. truncate는 데이터 정의어이기 때문에 rollback이 되지 않는다는 점에서 delete문과 다르다. 즉, 삭제 이후 복구할 수 없다.

특징

  • truncate는 DDL 명령이다.
  • truncate와 where절을 함께 사용할 수 없다.(개별적으로 행 삭제 불가능)
  • 테이블에서 모든 행을 일괄 삭제한다.
  • 트랜잭션 로그에 한 번만 기록되므로 delete보다 성능 면에서 더 빠르다.
  • 모든 행을 삭제하는 데에는 가장 빠르고 효율적인 방법이다.
  • rollback이 불가능하다.
  • 외래키에 참조되는 테이블에서 실행할 수 없다. 외래키의 무결성을 확인하지 않기 때문이다.




참고

profile
끄적끄적

0개의 댓글