티스토리 뷰
개요
동시에 여러 트랜잭션이 존재할 때 다른 트랜잭션에서 변경하거나 삽입한 데이터를 조회 할 수 있는지 여부
트랜잭션 격리 수준 4단계
- READ UNCOMMITTED
- READ COMMITTED
- REFEATABLE READ
- SERIALZABLE
READ UNCOMMITTED
트랜잭션의 변경 내용이 COMMIT 되기 전에도 다른 트랜잭션에서 조회 할 수 있습니다.
정합성에 문제가 많은 격리수준으로 사용하지 않는것이 좋습니다.
READ COMMITTED
다른 트랜잭션에서 Commit하기 전에 변동된 내용은 조회되지 않습니다.
즉 Dirty Read가 발생하지 않습니다.
Undo 영역에 백업된 데이터 값을 가져옵니다.
하나의 트랜잭션에서 같은 SELECT 쿼리를 여러번 수행하였을 때 다른 결과가 나올 수 있습니다. REPETABLE READ의 정합성이 지켜지지 않습니다.
REPEATABLE READ
조회하는 트랜잭션보다 먼저 수행된 트랜잭션에서 변경한 데이터는 Commit을 하더라도 조회되지 않습니다.
변경된 데이터는 조회되지 않지만 삽입한 데이터는 조회되며 Phantom Read 문제가 생길수 있습니다.
SERIALIZABLE
가장 강력한 격리 수준으로 다른 트랜잭션이 존재하는 동안 쓰기작업을 할 수 없습니다.
트랜잭션 격리 수준중 가장 성능이 안좋습니다.
Phantom Read가 발생하지 않습니다. 하지만 일반적으로 잘 사용되지 않습니다.
트랜잭션 격리 수준간 발생하는 현상
격리 수준 | Dirty Read | Non-Repeatable Read | Phantom Read |
Read Uncommitted | O | O | O |
Read Committed | - | O | O |
Repeatable Read | - | - | O |
Serializable | - | - | - |
Dirty Read
다른 트랜잭션에서 변경한 사항을 Commit하기전에 조회 할 수 있는 현상
Non-Repeatable Read
한 트랜잭션에서 같은 쿼리를 여러번 수행할 때, 각 쿼리의 결과가 다르게 나타나는 현상
Phantom Read
한 트랜잭션에서 같은 쿼리를 여러번 수행할 때, 처음에 조회되지 않았던 데이터가 다음에 조회할 때 나타나는 현상
Reference
'데이터베이스 > Oracle, MySQL' 카테고리의 다른 글
mysql에서 user 추가하기 (0) | 2021.06.03 |
---|
댓글