Transaction Isolation Level
트랜잭션 격리 수준은 트랜잭션의 안정성을 보장하기 위한 4가지 속성인 ACID
- Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)
성능을 위하여 중 Isolation을 완화하여 적용하는 수준
READ UNCOMMITTED
- 커밋 전의 트랜잭션의 데이터 변경을 다른 트랜잭션이 읽는 것 허용
Dirty Reads
가 발생할 수 있다.- 트랜잭션 A가 작성한 값을 트랜잭션 B가 읽는

- 데이터를 읽을 때 lock 을 사용하지 않는다.
- 데이터를 수정할 때는 트랜잭션이 완료될 때 까지 lock을 사용한다.
READ COMMITTED (Oracle Default)
- 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능
Non-Reapeatable Reads
가 발생할 수 있다.- 같은 트랜잭션 내에서 동일한 조회 쿼리에 대해 다른 값이 나오는 데이터 불일치 문제

- 데이터를 읽거나 쓸 때 lock이 사용된다.
- 데이터를 수정할 때는 트랜잭션이 완료될 때까지 lock을 사용한다.
- 데이터를 읽을 때는 데이터를 읽은 즉시 lock을 해제한다.
- range-lock을 관리하지 않는다.
REAPEATABLE READ (MySQL default)
- 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장

- Phantom Reads 가 발생할 수 있다.

- 데이터를 읽거나 쓸 때 lock이 사용된다.
- 데이터를 읽거나 수정할 때 모두 트랜잭션이 완료될 때까지 lock이 사용된다.
- range-lock을 관리하지 않는다.
- 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때가지 후행 트랜잭션이 갱신하거나 상제한는 것은 불허함으로써 같은 데이터를 두 번 쿼리했을 때 일관성 있는 결과를 리턴
- Phantom Read 현상은 여전히 발생
SERIALIZABLE
• 선형 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 중간에 새로운 레코드를 산입하는 것도 막아줌
- 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가
- 데이터를 읽거나 쓸 때 lock이 사용된다.
- 데이터를 읽거나 수정할 때 모두 트랜잭션이 완료될 때까지 lock 이 사용된다.
- range-lock을 관리한다.
