Dirty Read는 단순히 값이 달라지는 문제가 아니라, 아직 존재가 보장되지 않은 중간 상태를 다른 트랜잭션이 사실처럼 사용해 버리는 현상입니다.
DB의 최종 기록은 다시 100만원으로 돌아가지만, T2는 그 전에 본 50만원을 기준으로 이미 판단을 내릴 수 있습니다.
다른 트랜잭션이 읽어도 문제가 없는 커밋 완료 상태입니다.
T1이 잠깐 만든 변경값입니다. 아직 COMMIT되지 않아 사라질 수 있습니다.
50만원은 역사에서 사라지고, 실제로 남는 값은 처음과 같은 100만원입니다.
UPDATE 잔고 = 50만원
다른 트랜잭션이 보면 안 되는 중간 상태입니다.
ROLLBACK
정상이라면 확정된 값만 읽어야 합니다.
SELECT 잔고 -> 50만원
읽은 50만원은 더 이상 존재하지 않는데도, 이미 판단 근거로 사용됐을 수 있습니다.