READ COMMITTED
같은 트랜잭션이어도, 각 SELECT는 그 순간의 커밋값을 다시 본다
기준은
트랜잭션 시작 시점
이 아니라
SELECT 실행 시점
입니다. 그래서 미커밋 값은 읽지 않지만, 다른 트랜잭션이 중간에 커밋하면 같은 쿼리 결과는 달라질 수 있습니다.
시간 축
시점 1
둘 다 시작
시점 2
T2는 수정했지만
아직 COMMIT 전
시점 3
T2 COMMIT 후
다음 SELECT 실행
커밋된 기준값
SELECT가 참조하는 공식 값
현재 커밋 상태
300
아직 변경이 커밋되지 않았습니다.
현재 커밋 상태
300
T2가 400으로 바꿨지만 기준값은 그대로입니다.
현재 커밋 상태
400
COMMIT가 끝난 뒤부터 새 기준값이 됩니다.
T2 쓰기
값을 바꾸는 트랜잭션
시작
BEGIN
후 아직 변경 없음
수정만 완료
UPDATE 직원 SET 급여 = 400 WHERE id = 1;
미커밋
공식 반영
COMMIT
후 400이 공식 상태가 됩니다.
T1 읽기
같은 트랜잭션 안의 두 번 조회
시작
BEGIN
후 아직 조회 전
첫 번째 SELECT
SELECT 급여 FROM 직원 WHERE id = 1;
300
미커밋 400은 보이지 않음
두 번째 SELECT
SELECT 급여 FROM 직원 WHERE id = 1;
400
같은 T1인데 결과가 바뀜