이번엔 MySQL InnoDB 엔진의 기본 Transaction Isolation 레벨인 REPEATABLE READ에 대해 살펴보자. 이전 실습 때와 같은 출발점에서 시작하자.
일단 T2에서
(1) id 1번 row의 count 컬럼 값을 100에서 200으로 수정하고
(2) 새로운 row도 추가해보자.
그리고 이 상태에서 T1에서 확인을 해보면
T2의 작업이 전혀 반영되지 않은 것을 알 수 있다. 게다가
T2에서 이렇게 커밋을 해도
T1에서는 여전히 초기 스냅샷만을 참조할 뿐이라는 것을 알 수 있다.
꽤 강력한 고립화 레벨이지 않은가?
이렇게 T1을 COMMIT하고 T2가 한 작업 결과를 확인해볼 수 있다.
REPEATABLE READ는 다른 트랜잭션(T2)이 무슨 작업을 하든, 커밋을 하든 말든 상관없이 T1이 나만의 스냅샷을 바라보고 작업할 수 있게 해주는 강력한 고립화 레벨이다. 자, 다음에는 이보다 더 강력한 SERIALIZABLE 레벨을 보자.
*뒤늦게 확인 결과, REPEATABLE READ에서도 원래는 Phantom Row 현상이 발생할 수 있는데 InnoDB 스토리지 엔진의 경우에는 발생하지 않는 것이었다..