같은 트랜잭션에서 다시 읽기
읽기 조건은 같아도, 바뀐 것이 값인지 행 집합인지에 따라 현상이 갈립니다.
팬텀 읽기의 핵심은 같은 WHERE 조건을 다시 실행했는데, 그 범위 안에 새 행이 들어오거나 기존 행이 사라져 결과 개수 자체가 달라진다는 점입니다.
값 변경
Non-Repeatable Read
같은 행을 다시 읽었더니 값이 달라집니다.
SELECT 잔고 FROM 계좌 WHERE id = 7
같은 행은 그대로 있고, 행 안의 값만 바뀝니다.
행 추가 또는 삭제
Phantom Read
같은 조건으로 다시 조회했더니 이전에 없던 행이 나타나거나, 있던 행이 사라집니다.
SELECT * FROM 주문 WHERE 날짜 = '2024-01-01'
첫 조회 결과
주문 #10109:10
주문 #10210:35
주문 #10313:20
결과 개수 3건
INSERT
+ COMMIT
두 번째 조회 결과
주문 #10109:10
주문 #10210:35
주문 #10313:20
주문 #10415:05 새로 포함
결과 개수 4건
같은 WHERE 절인데도 조회 결과에 포함되는 행의 집합이 달라집니다.
구분 포인트
값이 바뀌면 Non-Repeatable Read, 행 수와 집합이 바뀌면 Phantom Read입니다.