13.3.4 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
문은 identifier
의 이름이 명명 된 트랜잭션 세이브 포인트를 설정합니다. 현재의 트랜잭션에 같은 이름의 세이브 포인트가 포함되어 있으면 오래된 세이브 포인트는 삭제되고 새로운 세이브 포인트가 설정됩니다.
ROLLBACK TO SAVEPOINT
문은 트랜잭션을 종료하지 않고 트랜잭션을 지정된 세이브 포인트로 롤백합니다. 세이브 포인트가 설정된 후 현재 트랜잭션이 행의 변경 사항은 롤백 되 돌리지 만, InnoDB
는 세이브 포인트의 후에 메모리에 저장된 행 잠금을 해제하지 않습니다.
(새로 삽입 된 행의 경우, 락 정보는 해당 행에 저장되어있는 트랜잭션 ID가 전달됩니다. 잠금이 개별적으로 메모리에 저장되는
것은 아닙니다.이 경우 행 잠금은 Undo 풀려 늘어난다.) 지정된 세이브 포인트보다 후에 설정된 세이브 포인트는 삭제됩니다.
ROLLBACK TO SAVEPOINT
문을 다음 오류를 반환 한 경우, 지정된 이름의 세이브 포인트가 존재하지 않는 것을 보여줍니다.
ERROR 1305 (42000) : SAVEPOINT identifier
does not exist
RELEASE SAVEPOINT
문은 지정된 세이브 포인트를 현재 트랜잭션의 일련의 세이브 포인트에서 제거합니다. 커밋 또는 롤백은 발생하지 않습니다. 그 세이브 포인트가 존재하지 않으면 오류가 발생합니다.
COMMIT
또는 세이브 포인트를 지정하지 ROLLBACK
을 실행하면 현재 트랜잭션의 세이브 포인트가 삭제됩니다.
스토어드 함수가 호출되거나 트리거가 활성화되면 새로운 세이브 포인트 레벨이 생성됩니다. 이전의 수준에있는 세이브 포인트를 사용할 수 없게되므로 새로운 수준의 세이브 포인트와는 경쟁하지 않습니다. 함수 또는 트리거가 종료되면 그 함수 또는 트리거에 의해 생성 된 세이브 포인트는 해제되고 이전의 세이브 포인트 레벨이 복원됩니다.