멘토링 시간에 설명 제대로 못함.
다시 한번 정리하기!!
요약하면 한 트랜잭션이 다른 트랜잭션이 끼어들 때 어떤 작업으로 끼어들 거를 허용할까? 수준
다중 사용자 환경에서 트랜잭션이 서로 간섭 없이 안전하게 DB에 접근, 수정할 수 있는 정도
동시성과 관련있음.
높은 격리 수준은 일반적으로 더 낮은 동시성을 의미.
동시성?
프로세스, 스레드가 시스템 자원을 공유하면서 동시에 실행되는 성질
아직 커밋되지 않은 데이터를 일는 현상
한 트랜잭션이 같은 데이터를 두 번 이상 일을 때, 첫 번째 읽기와 두 번째 읽기 사이에 다른 트랜잭션이 그 데이터를 수정하여 두 번의 읽기 결과가 서로 다를 때 발생
즉, 한 트랜잭션에서 일관성 있는 정보를 제공하지 못하는(반복적으로 정상적인 읽기가 불가능한 상태) 경우
한 트랜잭션이 조회를 수행할 때, 그 사이 다른 트랜잭션이 레코드를 삽입하거나 삭제해서 발생.
처음 쿼리에는 존재하지 않았던 추가 레코드(팬텀)이 두 번쨰 쿼리에서는 나타나는 경우.
또는 첫 번째 쿼리에서는 존재했는데, 두 번째 쿼리에서는 존재하지 않는 경우.
만약 첫 번째 트랜잭션이 커밋되지 않았는데, 이 수준에서는 두 번째 트랜잭션이 아직 커밋되지 않은 데이터를 읽을 수 있다. 만약 그대로 커밋이 되면 상관없는데, 이게 롤백이 되어 버리면 더러운 데이터를 읽는 것이다.
만약 격리 수준을 벗어난 트랜잭션이 발생하면 블로킹이 발생함.
트랜잭션이 특정 데이터의 접근 권한의 '락'을 획득하는 것.