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
'Databases > MySQL' 카테고리의 다른 글
[MySQL] XA Transaction (0) | 2020.09.13 |
---|---|
[MySQL] SET TRANSACTION 문 (0) | 2020.09.12 |
[MySQL] Table Partitioning - MAXVALUE 파티션에 따른 테이블 재구성시 유의사항 (0) | 2020.09.07 |
[MySQL] START TRANSACTION, COMMIT, 그리고 ROLLBACK문 (0) | 2020.09.04 |
[MySQL] Table Partitioning-파티셔닝에 대한 제한 사항 (0) | 2020.09.03 |