Isolation Levels
한 트랜잭션에서 다른 트랜잭션이 동시에 수행하는 작업을 어느 정도로 보게할 것인지를 결정한다.
DIRTY READ | NON-REPEATABLE READ | PAHNTOM READ | |
---|---|---|---|
READ UNCOMMITTED | o | o | o |
READ COMITTED | x | o | o |
REPEATABLE READ | x | x | o (InnoDB는 x) |
SERIALIZABLE READ | x | x | x |
READ UNCOMMITTED
한 트랜잭션에서 다른 트랜잭션의 아직 커밋되지 않은 변경사항을 볼 수 있다. Dirty Read를 허용한다.
READ COMMITTED
한 트랜잭션에서 다른 트랜잭션에서의 커밋된 변경사항을 볼 수 있다. Non-repeatable Read와 Phantom Read를 허용한다. 같은 트랜잭션 내에서 데이터를 다시 읽었을 때 다른 결과를 얻을 수 있다.
REAPEATABLE READ
트랜잭션 도중에 같은 데이터를 여러번 읽어도 처음에 읽은 데이터와 동일하게 보장된다. 즉, 한 트랜잭션에서 수행되는 다른 트랜잭션의 변경사항이 이 트랜잭션에 영향을 주지 않는다. Phantom Read를 허용한다.
SERIALIZABLE
모든 트랜잭션을 순차적으로 실행하여 동시성 문제를 완전히 피한다.
DIRTY READ
트랜잭션에서의 변경 내용이 commit, rollback 여부와 상관 없이 다른 트랜잭션에서 보인다.
NON-REPEATABLE READ
하나의 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 두 번째 결과가 달라지는 경우이다. 첫 번째 쿼리와 두 번째 쿼리 사이에 다른 트랜잭션이 해당 데이터를 수정하고 커밋했을 때 발생한다.
PHANTOM READ
한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 첫 번째 쿼리에서 없던 행이 두 번째 쿼리에서 나타나는 경우이다. 첫 번째 쿼리와 두 번째 쿼리 사이에 다른 트랜잭션이 새로운 행을 추가하고 커밋했을 때 발생한다.
'DB > MySQL' 카테고리의 다른 글
바이너리 로그의 복제 데이터 포맷 (1) | 2023.11.09 |
---|---|
[Real MySQL] 인덱스 (2) (0) | 2023.08.31 |
[Real MySQL] 트랜잭션과 잠금 (0) | 2023.08.31 |
InnoDB Strage Engine (0) | 2023.03.09 |
[Real MySQL] 인덱스 (1) (0) | 2023.02.24 |