ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 트랜잭션 격리 수준
    컴공지식/데이터베이스 2024. 6. 16. 13:56

    각 격리 수준을 쉽게 풀어보자.

    Read Uncommitted: 다른 사람이 작성 중인 숙제도 베끼는 상황. 데이터 일관성 낮음
    Read Committed: 다른 사람이 숙제를 다 끝낸 후 베끼는 상황. 대부분의 db기본 격리 수준임
    Repeatable Read: 처음 빌린 책 상태가 끝까지 유지되는 상황. Mysql 기본 격리 수준
    Serializable: 혼자 도서관을 빌린 상황. 성능 저하될 수도..

    발생 가능 상황

    더티리드: 다른 트랜잭션이 아직 커밋하지 않은 변경사항을 읽을 수 있음
    논 리피터블 리드: 동일 트랜잭션 내에서 같은 행을 여러 번 읽을 때 값이 달라질 수 있음. 다른 트랜잭션이 데이터를 수정할 수 있기 때문
    팬텀리드: 트랜잭션 동안 새로운 행이 추가되거나 기존 행이 삭제될 수 있음. 쿼리 결과에 예상치 못한 "팬텀" 행이 나타날 수 있음

    격리 수준에 따른 발생 가능한 상황

    Read Uncommitted: 더티 리드, 논 리피터블 리드, 팬텀 리드 발생.
    Read Committed: 논 리피터블 리드, 팬텀 리드 발생.
    Repeatable Read: 팬텀 리드 발생.
    Serializable: 아무것도 발생하지 않음.

    왜 Repeatable Read는 lost update anomaly가 발생하지 않을까?
    Repeatable Read 격리 수준에서는 첫 번째 트랜잭션이 읽은 데이터가 다른 트랜잭션에 의해 변경되지 않도록 보장되기 때문이다.
    만약 다른 트랜잭션이 이를 변경하려고 하면 그 트랜잭션은 롤백되거나 블록된다.




Designed by Tistory.