시점으로 보면 더 쉽다

트랜잭션 제어 명령은 순서대로 등장하지만,
역할은 중간 복구최종 종료로 나뉜다.

`SET TRANSACTION`은 규칙을 정하고, `SAVEPOINT`는 진행 중 되돌릴 기준점을 남기며, `COMMIT`·`ROLLBACK`은 마지막에 전체 결과를 확정하거나 취소합니다.

핵심 차이 `SAVEPOINT`는 트랜잭션을 끝내지 않는다.

저장점 이후만 되돌린 뒤 계속 진행할 수 있지만, `COMMIT` 또는 `ROLLBACK`이 실행되면 그 트랜잭션은 종료됩니다.

1

특성 설정

이번 작업에 적용할 격리 수준이나 읽기 특성을 먼저 결정합니다.

SET TRANSACTION
ISOLATION LEVEL ...
아직 변경 시작 전

데이터는 바뀌지 않았고, 트랜잭션의 규칙만 정해 둔 상태입니다.

2

트랜잭션 시작

이 시점부터 여러 SQL 변경이 하나의 원자적 작업 단위로 묶입니다.

START TRANSACTION
BEGIN
BEGIN TRANSACTION
함께 성공하거나 함께 취소

이후 실행되는 변경들은 마지막 결정 전까지 하나의 묶음으로 취급됩니다.

3

저장점과 부분 복구

작업 도중 기준점을 남겨 두면 전체를 버리지 않고 일부만 되돌릴 수 있습니다.

SAVEPOINT sp1
...
ROLLBACK TO sp1
`sp1` 이전 변경은 유지
  • 저장점 뒤에서 실패한 작업만 취소
  • 트랜잭션은 계속 살아 있어 이후 작업 가능
4

최종 종료

마지막에는 지금까지의 전체 변경을 확정할지, 처음부터 취소할지를 결정합니다.

COMMIT

변경 내용을 확정하고 잠금을 해제합니다.

ROLLBACK

트랜잭션 전체 변경을 취소하고 잠금을 해제합니다.

여기서 트랜잭션이 끝난다

`SAVEPOINT`와 달리, 종료 명령이 실행되면 같은 트랜잭션을 더 이어서 사용할 수 없습니다.

기억할 구분

중간에 되돌릴 필요가 있으면 `SAVEPOINT`를 찍고 `ROLLBACK TO`로 그 지점까지만 복구합니다. 전체 결과를 확정하거나 취소하는 결정은 마지막 `COMMIT` 또는 `ROLLBACK`에서 한 번만 일어납니다.