여러 트랜잭션이 동시 수행될 때 각각의 트랜잭션이 얼마나 격리되어 있는지를 정의한다.
--> 트랜잭션간의 상호간섭을 제어하는데 중요한 역할
트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다. 가장 낮은 격리 수준으로 dirty read발생가능
※dirty read: 한 트랜잭션이 다른 트랜잭션에서 아직 커밋되지 않은 데이터를 읽을 때 발생
t1이 롤백하면 t2는 잘못된 데이터를 읽는다.
커밋된 데이터만 읽을 수 있음, 대부분 DB의 기본 격리 수준
Non-repeatable Read, phantom Read 발생가능
※Non-repeatable Read : 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션이 데이터를 수정하거나 삭제하여 두 번의 쿼리 결과가 다른 경우 발생하는 경우
※phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션이 데이터를 삽입하여 두 번의 쿼리 결과에 추가된 행이 나타나는 경우
다른 트랜잭션이 데이터를 수정할 수 없도록 한다.
phantom read 발생가능
가장 높은 격리 수준으로 , 트랜잭션을 완전히 직렬화하여 실행한다.
성능 저하를 초래할 수 있다.
Read Uncommitted: Dirty read 가능
Read Committed: Dirty read 불가능, Non-repeatable read와 Phantom read 가능
Repeatable Read: Dirty read와 Non-repeatable read 불가능, Phantom read 가능
Serializable: Dirty read, Non-repeatable read, Phantom read 모두 불가능
일반적엔 웹 앱에서는 부작용이 발생할 가능성이 낮고 발생하더라도 사용자 경험에 큰 영향을 미치지 않는다.(but 금융쪽 같은 경우는 더 높은 일관성을 요구할 가능성이 높음)
기본 db설정이 읽기완료 수준의 설정이고 이는 충분한 일관성 제공하기 때문
--> 현실적인 선택