Learning
토픽 43 / 201·무결성 및 트랜잭션

Phantom Read

Phantom Read

한 트랜잭션 내에서 같은 범위 조건 쿼리를 반복 실행했을 때, 다른 트랜잭션의 INSERT/DELETE로 인해 결과 행의 수가 달라지는 현상

특징: Repeatable Read 이하에서 발생, 범위 쿼리 대상, INSERT/DELETE 기인

동작원리: T1이 범위 쿼리(WHERE age>20) -> T2가 해당 범위에 INSERT 후 커밋 -> T1이 같은 쿼리 시 새 행 출현

방지 방법: Serializable 격리 수준, Gap Lock(MySQL InnoDB), MVCC Snapshot(PostgreSQL)

적용사례: 집계 쿼리 불일치, 건수 카운트 변동

비교: Phantom Read(행 수 변경/INSERT 기인) vs Non-Repeatable Read(값 변경/UPDATE 기인)

연관: 격리 수준, 동시성 문제, Serializable, Gap Lock