트랜잭션 격리 수준은 동시에 실행되는 여러 트랜잭션이 서로에게 영향을 미치는 정도를 결정하는 데 사용되는 개념입니다. 다음은 표준적으로 제공되는 네 가지 격리 수준 레벨과 각 레벨의 설명입니다.
- READ UNCOMMITTED (커밋되지 않은 읽기):
- 가장 낮은 격리 수준이며, 다른 트랜잭션이 아직 커밋하지 않은 데이터를 읽을 수 있습니다.
- 커밋되지 않은 데이터를 읽을 수 있으므로 데이터 일관성이 보장되지 않습니다.
- 다른 트랜잭션이 롤백되면 해당 트랜잭션에서 읽은 데이터도 롤백될 수 있습니다.
- READ COMMITTED (커밋된 읽기):
- 커밋된 데이터만 읽을 수 있습니다.
- 다른 트랜잭션이 커밋한 데이터만 읽기 때문에 일관성은 유지됩니다.
- 하지만 한 트랜잭션 내에서 여러 번 같은 쿼리를 실행하면 다른 결과를 얻을 수 있습니다.
- REPEATABLE READ (반복 가능한 읽기):
- 트랜잭션 내에서 같은 쿼리를 여러 번 실행해도 결과가 항상 동일합니다.
- 한 트랜잭션에서 읽은 데이터는 다른 트랜잭션이 수정할 수 없으며, 다른 트랜잭션이 새로운 데이터를 삽입해도 읽히지 않습니다.
- 단, phantom reads(유령 읽기)는 발생할 수 있습니다. 즉, 한 트랜잭션에서 동일한 쿼리를 실행했을 때, 다른 트랜잭션이 새로운 데이터를 삽입해 해당 트랜잭션에서는 이전에 읽지 못했던 데이터가 추가로 읽힐 수 있습니다.
- SERIALIZABLE (직렬화 가능):
- 가장 높은 격리 수준이며, 모든 트랜잭션을 순차적으로 실행하는 것과 동일하게 동작합니다.
- 동시성 문제는 발생하지 않지만 동시성 수준이 낮아져서 성능이 저하될 수 있습니다.
- SERIALIZABLE 수준에서는 phantom reads가 발생하지 않습니다.
각 격리 수준은 데이터 일관성과 동시성 수준 사이에 트레이드오프 관계가 있습니다. 격리 수준이 높을