트랜잭션의 주요 특징(ACID)
Read Uncommitted | 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다. |
Read Committed | 트랜잭션이 커밋된 데이터만 다른 트랜잭션이 읽도록 허용하여 Dirty Read를 방지한다. 커밋된 데이터만 읽더라도 Non-Repeatable Read, Phantom Read 현상을 막지는 못한다. 읽는 시점에 따라 결과가 다를 수 있기 때문이다. ( 한 트랜잭션 내에서 쿼리를 두번 수행 했는데 두 쿼리 사이에 다른 트랜잭션이 값을 변경/삭제 하거나 새로운 레코드를 삽입하는 경우 ) |
Repeatable Read | 트랜잭션 내에서 쿼리를 두번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지한다. Phantom Read 현상을 막지는 못한다. 없던 레코드가 나타날 수는 있다. |
Serializable Read | 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 변경됨은 물론 새로운 레코드가 나타나지도 않는다. |
set transaction isolation level read serializable; |