트랜잭션 종료 비교

같은 UPDATE라도 마지막 선택이 공개될 상태를 결정합니다.

두 명령 모두 트랜잭션을 끝내고 잠금을 해제하지만, 바깥에 남기는 데이터와 엔진이 수행하는 마지막 작업은 다릅니다.

공유 시작 상태

UPDATE는 이미 실행됐지만 아직 트랜잭션 내부입니다. 지금은 잠정 변경만 존재하고, 외부에는 최종 결과가 아닙니다.

BEGIN;
UPDATE accounts
SET balance = balance + 100000
WHERE id = 2;
이 시점의 의미
  • 변경 상태: +100000이 적용된 결과가 아직 잠정 상태입니다.
  • 동시성: 관련 행 잠금이 유지되어 다른 세션은 최종값으로 확정해 볼 수 없습니다.
  • 갈림길: 이제 COMMIT으로 남길지, ROLLBACK으로 지울지만 결정하면 됩니다.
같은 시작점

종료 명령만 다릅니다.

COMMIT

변경을 최종 상태로 확정

ROLLBACK

변경을 원래 상태로 복원

최종 데이터

외부에 남는 값

+100000이 반영된 값이 영구 데이터가 됩니다.

변경 전 값으로 돌아가며, UPDATE는 없던 일이 됩니다.

잠금 해제 후

다른 세션이 보는 것

잠금이 풀리면 다른 세션은 새 값을 정상 결과로 읽습니다.

잠금이 풀려도 다른 세션은 원래 값만 보게 됩니다.

엔진의 마지막 작업

비용과 처리 방향

커밋 로그를 플러시해 완료를 확정합니다. 보통 빠르게 끝납니다.

Undo를 적용해 변경을 취소합니다. 경우에 따라 더 느릴 수 있습니다.

핵심 정리

둘 다 트랜잭션 종료와 잠금 해제는 같지만, COMMIT은 변경을 공개하고 ROLLBACK은 변경을 지운 뒤 공개합니다.