공유 시작 상태
UPDATE는 이미 실행됐지만 아직 트랜잭션 내부입니다. 지금은 잠정 변경만 존재하고, 외부에는 최종 결과가 아닙니다.
BEGIN; UPDATE accounts SET balance = balance + 100000 WHERE id = 2;
두 명령 모두 트랜잭션을 끝내고 잠금을 해제하지만, 바깥에 남기는 데이터와 엔진이 수행하는 마지막 작업은 다릅니다.
UPDATE는 이미 실행됐지만 아직 트랜잭션 내부입니다. 지금은 잠정 변경만 존재하고, 외부에는 최종 결과가 아닙니다.
BEGIN; UPDATE accounts SET balance = balance + 100000 WHERE id = 2;
+100000이 적용된 결과가 아직 잠정 상태입니다.COMMIT으로 남길지, ROLLBACK으로 지울지만 결정하면 됩니다.종료 명령만 다릅니다.
변경을 최종 상태로 확정
변경을 원래 상태로 복원
외부에 남는 값
+100000이 반영된 값이 영구 데이터가 됩니다.
변경 전 값으로 돌아가며, UPDATE는 없던 일이 됩니다.
다른 세션이 보는 것
잠금이 풀리면 다른 세션은 새 값을 정상 결과로 읽습니다.
잠금이 풀려도 다른 세션은 원래 값만 보게 됩니다.
비용과 처리 방향
커밋 로그를 플러시해 완료를 확정합니다. 보통 빠르게 끝납니다.
Undo를 적용해 변경을 취소합니다. 경우에 따라 더 느릴 수 있습니다.
둘 다 트랜잭션 종료와 잠금 해제는 같지만, COMMIT은 변경을 공개하고 ROLLBACK은 변경을 지운 뒤 공개합니다.