트랜잭션의 격리 수준에 따라 다음과 같은 현상이 발생할 수 있다
- Dirty read : 커밋되지 않은 정보 조회
- Non-repeatable read : 동일한 정보를 조회했을 때 값이 다르게 나오는 현상
- Phantom read : 이전에는 없던 데이터가 조회되는 현상
트랜잭션의 격리 수준은 다음과 같다
- Read Uncommitted : 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽도록 허용한다
- Dirty read, Non-repeatable read, Phantom read 발생
- Read Committed : 커밋된 데이터들만 읽도록 하용한다 커밋되지 않은 데이터들은 undo 로그에서 읽어온다
- Non-repeatable read, Phantom read 발생
- Repeatable read : 트랜잭션내에서 수정 등 변경 사항에 대해 undo 로그에 저장하고, 현재 트랜잭션 이전에 실행되던 트랜잭션은 undo 로그에 접근하여 조회한다(MySQL default)
- Serializable read : 트랜잭션 내에서 동일한 쿼리를 두 번 이상 실행할 때, 값이 바뀌거나 새로 생성되지 않는 것을 보장한다
https://sabarada.tistory.com/m/117