Transaction Isolation Level

shy_dd·2022년 3월 8일
0

SQLP

목록 보기
7/9
post-thumbnail

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

profile
데이터를 사랑하는 개발자

0개의 댓글