ANSI/ISO SQL 표준(SQL92)에 정의된 Transaction Isolation Level
-SQL 전문가 가이드, 한국데이터산업진흥원 p.787
각 레벨의 대한 간략한 설명은 아래와 같다.
- Read Uncommitted:
트랜젝션에서 처리중인 아직 커밋되지 않은 데이터를 다른 트랜젝션이 읽을 수 있음
- Read Committed:
트랜젝션이 커밋된 데이터만 다른 트렌젝션이 읽을 수 있음
- Repeatable Read:
트랜젝션 내에서 2번 쿼리를 수행 시,
첫 번째 쿼리에 있던 레코드가 사라지거나 값이 변경되는 것을 방지함
- Serializable Read:
Repeatable Read에 추가적으로 기존에는 없던 새로운 데이터가 읽히지 않음
각 레벨별 발생할 수 있는 현상은 아래와 같다.
- Dirty Read:
다른 트랜젝션에 의해 수정됐지만 아직 커밋은 되지 않은 데이터를 읽음
- Non-Repeatable Read:
동일 트랜잭션 내에서 2번의 쿼리를 수행할 때,
그 사이에 다른 트랜젝션에 의한 변경 또는 삭제가 일어 남으로써
두 개의 쿼리가 다른 결과를 나타냄
- Phantom Read:
동일 트랜잭션 내에서 2번의 쿼리를 수행할 때,
처음 수행한 쿼리에서는 존재 하지 않던 유령 레코드가 두 번째 쿼리에서 읽힘
아래와 같이 테이블을 생성 후 데이터를 입력한다.
왼쪽 Transaction 1과 오른쪽 Transaction2를 순차적으로 실행 하였을 때,
5번과 8번의 결과를 알아보자.
1번 진행
2번 진행
3번 진행
4번 진행
5번 진행
6번 진행
7번 진행
- Commit을 하게되면 트랜젝션이 종료되면서 설정한 Isolation level이 해제된다.
이에 따라 기본 레벨인 Read Committed로
변경되면서 Transaction 2에서 커밋된 변경 값을 읽게 된다.
8번 진행
-SQL 자격검정 실전문제, 한국데이터진흥원 p.155 #27