데이터의 변경이 끝나지 않은 상황에서 다른 트랜잭션이 데이터를 읽어 잘못된 데이터를 읽는 경우
한 트랜잭션 내에서 같은 데이터를 2번 이상 읽었을 때, 다른 값을 읽게되는 경우
Phantom Read (팬텀 읽기)
한 트랜잭션 내에서 같은 쿼리를 2번 실행했을 때, 없던 데이터가 추가된 경우
Commit 되지 않은 데이터에 대해서 읽기가 가능하다.
3가지 문제 모두 발생 가능하다.Level 1: Read commited
Commit된 데이터에 한해서만 읽기가 가능하다. 하지만 한 트랜잭션이 같은 데이터를 2번 읽는 사이에, 데이터의 변경(commit)이 일어나면 non-repeatable read 문제가 발생하며, 같은 맥락에서 phantom read 문제도 발생 가능하다.
commit 되지 않은 데이터에 접근할 경우
Undo에 저장된 이전의 데이터를 읽게된다.
한 트랜잭션에서 데이터를 읽는 동안, 다른 트랜잭션은 해당 데이터에 대해 수정/삭제 연산을 할 수 없고, 삽입만 가능하다. Phantom read 문제가 발생할 수 있다.
실제 동작 방식
읽기 연산을 할 때, 트랜잭션 번호가 자신보다 낮은 트랜잭션의 변경사항만 읽고, 그렇지 않으면 Undo에 있는 이전 데이터를 읽어온다.
한 트랜잭션에서 데이터를 읽는 동안, 다른 트랜잭션에서 수정/삭제/삽입이 불가능하다. 가장 높은 고립수준이지만, 동시성이 떨어져서 성능이 하락하게된다.