[MySQL] SAVEPOINT, ROLLBACK TO SAVEPOINT, 그리고 RELEASE SAVEPOINT문

SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier

 

InnoDB SQL SAVEPOINT, ROLLBACK TO SAVEPOINT, RELEASE SAVEPOINT ROLLBACK 대한 선택적 WORK 키워드를 지원합니다.

 

SAVEPOINT문은 이름이 식별자여서 이름이 지정된 트랜잭션 세이브포인트을 설정합니다. 현재 트랜잭션에 이름이 같은 저장점(savepoint) 있으면 이전 저장점이 삭제되고 세이브포인트가 설정됩니다.

 

ROLLBACK TO SAVEPOINT 문은 트랜잭션을 종료하지 않고 트랜잭션을 이름이 지정된 세이브포인트로 롤백합니다. 세이브포인트가 설정된 행에 수행 현재 트랜잭션의 수정은 롤백에서 취소되지만 InnoDB 세이브 포인트 이후에 메모리에 저장된 잠금을 해제하지 않습니다. 새로 삽입 행의 경우 잠금 정보는 행에 저장된 트랜잭션 ID 의해 전달되며 잠금은 메모리에 별도로 저장되지 않습니다. 경우 잠금은 실행 취소 상태에서 해제됩니다. 이름이 있는 세이브포인트보다 나중에 삭제됩니다.

 

ROLLBACK TO SAVEPOINT 문이 다음 오류를 리턴하면 지정된 이름의 세이브포인트가 존재하지 않음을 의미합니다.

ERROR 1305 (42000): SAVEPOINT identifier does not exist

 

RELEASE SAVEPOINT 문은 현재 트랜잭션의 저장 세트에서 이름이 지정된 저장 점을 제거합니다. 커밋 또는 롤백이 발생하지 않습니다. 세이브 포인트가 존재하지 않으면 오류입니다.

 

COMMIT 또는 저장 이름을 지정하지 않는 ROLLBACK 실행하면 현재 트랜잭션의 모든 세이브포인트가 삭제됩니다.

 

저장된 기능이 호출되거나 트리거가 활성화되면 세이브포인트 레벨이 작성됩니다. 이전 레벨의 세이브포인트를 사용할 없게 되므로 레벨의 세이브포인트와 충돌하지 않습니다. 기능 또는 트리거가 종료되면 작성된 세이브포인트가 해제되고 이전 세이브포인트 레벨이 복원됩니다.

 

관련 포스트

myinfrabox.tistory.com/106?category=840483

 

[MySQL] START TRANSACTION, COMMIT, 그리고 ROLLBACK문

트랜잭션 문법은 다음과 같습니다. START TRANSACTION [transaction_characteristic [, transaction_characteristic] ...] transaction_characteristic: { WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY } B..

myinfrabox.tistory.com

 

Designed by JB FACTORY