문제
다음 상황에서, SERIALIZABLE 격리 수준에서는 방지되지만 REPEATABLE READ 격리 수준에서는 발생할 수 있는 트랜잭션 이상 현상의 명칭을 쓰시오.
[상황]
- T1: SELECT COUNT(*) FROM orders WHERE status = 'PENDING'
- T2: INSERT INTO orders VALUES (101, 'PENDING')
- T1: SELECT COUNT(*) FROM orders WHERE status = 'PENDING' (재실행)
정답
팬텀 리드(Phantom Read)
해설
REPEATABLE READ는 기존 행의 반복 조회 일관성은 보장하지만 범위 조건에 새로 삽입되는 행은 차단하지 못한다. 따라서 T1의 두 조회 사이에 T2가 PENDING 행을 삽입·커밋하면 결과 행 수가 달라지는 팬텀 리드가 발생한다. SERIALIZABLE은 범위 조회까지 직렬화해 이를 방지한다.