트랜잭션 격리의 4가지 수준은 무엇인가요?
트랜잭션 격리의 네 가지 수준은 커밋되지 않은 읽기, 커밋된 읽기, 반복 가능한 읽기 및 직렬화 가능입니다.
1. 커밋되지 않은 읽기: 트랜잭션은 커밋되지 않은 데이터를 읽을 수 있으며, 이를 더티 읽기라고도 합니다. 일반적으로 거의 사용되지 않습니다.
2. 읽기 커밋됨: 이는 대부분의 DBMS(예: Oracle, SQLServer)의 기본 트랜잭션 격리입니다. 합의된 쿼리를 다른 결과로 두 번 실행하는 것을 반복 불가능한 읽기라고도 합니다.
3. 반복 읽기(Repeable Read): MySQL의 기본 트랜잭션 격리 수준입니다. 동일한 트랜잭션으로 동일한 데이터를 여러 번 읽은 결과가 일관되도록 보장할 수 있습니다. Dirty Reading 문제는 해결할 수 있지만 이론적으로 Phantom Read 문제는 해결할 수 없습니다.
4. 직렬화 가능: 가장 높은 격리 수준입니다. 트랜잭션을 순차적으로 실행하면 읽기 데이터의 각 행이 잠깁니다. 이렇게 하면 팬텀 읽기 문제를 피할 수 있지만 시간 초과 및 잠금 경합 문제가 많이 발생할 수도 있습니다. 이 수준은 거의 적용되지 않으며 데이터 일관성을 보장하는 것이 매우 중요하고 동시성이 허용되지 않는 애플리케이션 시나리오에서만 고려됩니다.
트랜잭션 격리 수준 특성 비교
트랜잭션 격리 수준의 정의에서 볼 수 있듯이 직렬화 가능 수준은 격리 수준이 가장 높지만 효율성도 가장 낮습니다. 모든 작업에 대해 동일한 레코드가 순차적으로 실행됩니다.
MySql의 경우 기본 트랜잭션 수준은 반복 가능 읽기입니다. 정의에 따라 이 격리 수준은 팬텀 읽기 문제를 해결할 수 없지만 MySql은 반복 가능 읽기 구현에 Next 키 잠금 알고리즘을 사용하며 이 알고리즘을 사용하여 문제를 해결할 수 있습니다. 팬텀 읽기 문제.
Next 키 잠금 알고리즘은 쿼리 시 현재 작업 기록을 잠글 뿐만 아니라 쿼리에 포함된 범위도 잠급니다.
즉, 다른 트랜잭션이 현재 트랜잭션 쿼리 범위 내에서 데이터 작업을 수행하려는 경우 차단됩니다. 따라서 MySql에는 이미 반복 읽기 격리 수준 아래에 직렬화 가능 격리 수준이 있습니다. 격리.
위 내용 참고 : 바이두백과사전-격리수준