같은 조건, 다른 결과 집합

팬텀 읽기는 기존 행의 값이 아니라,
조건에 걸리는 행 집합이 바뀌는 현상입니다.

조회 조건은 그대로인데, 그 사이 새 행이 범위 안으로 들어오거나 빠져서 같은 쿼리의 결과 건수가 달라집니다.

변하지 않음
WHERE 조건은 동일합니다.
달라짐
조건을 만족하는 행 수가 바뀝니다.
SELECT id, amount FROM orders WHERE status = 'PAID' AND amount >= 100000;
T1 첫 조회
조건에 맞는 주문 3건
결과 행3
#101
120,000원 PAID
#104
180,000원 PAID
#109
140,000원 PAID
중간에 일어난 일
T2가 INSERT 후 COMMIT 새 주문 한 건이 같은 WHERE 조건을 만족하게 됨
→
새 행이 범위 안으로 진입 기존 행이 수정되지 않아도 결과 집합은 달라질 수 있음
T1 같은 조건 재조회
이번에는 주문 4건
결과 행4
#101
120,000원 PAID
#104
180,000원 PAID
#109
140,000원 PAID
#118
160,000원 PAID · 새로 포함
핵심 포인트

팬텀 읽기는 같은 조건의 재조회에서 행의 추가·삭제 때문에 결과 집합 자체가 달라지는 문제입니다. 즉, 바뀐 것은 개별 행의 값이 아니라 조건 범위 안에 존재하는 행 목록입니다.