D Define
Oread uncommitted (unsurmit 내용 읽기)
- Read Uncommitted에서 트랜잭션 수정은 제출하지 않아도 다른 업무에 노출됩니다. 트랜잭션은 커밋되지 않은 데이터를 읽을 수 있으며, 이를 더티 읽기(dirty read)라고도 합니다. 이 수준은 성능면에서 많은 문제를 일으킬 수 있습니다. Read uncommitted는 다른 수준에 비해 그다지 좋지는 않지만, 꼭 필요한 이유가 없는 한 실제 응용 프로그램에서는 거의 사용되지 않습니다.
읽기 커밋(커밋 내용 읽기)
- 대부분의 데이터베이스 시스템의 기본 격리 수준은 읽기 커밋입니다(그러나 MySQL은 그렇지 않습니다). 커밋된 읽기는 앞서 언급한 격리의 간단한 정의를 충족합니다. 즉, 트랜잭션이 시작되면 커밋된 트랜잭션에 의해 이루어진 수정 사항만 볼 수 있습니다. 즉, 트랜잭션이 처음부터 커밋된 시점까지 수정된 내용은 다른 트랜잭션에서 볼 수 없습니다. 동일한 쿼리를 두 번 실행하면 다른 결과가 나올 수 있으므로 이 수준을 반복 불가능 읽기라고도 합니다.
반복 읽기(repeatable read)
- 반복 읽기는 더티 읽기 문제를 해결합니다. 이 수준은 동일한 트랜잭션에서 동일한 레코드를 여러 번 읽은 결과의 일관성을 보장합니다. 그러나 이론적으로 반복 읽기 격리 수준은 여전히 또 다른 팬텀 읽기 문제를 해결할 수 없습니다. 소위 팬텀 읽기는 트랜잭션이 특정 범위의 레코드를 읽을 때 다른 트랜잭션이 해당 범위에 새 레코드를 삽입하는 것을 의미합니다. 이전 트랜잭션이 해당 범위의 레코드를 다시 읽으면 팬텀 행이 생성됩니다. InnoDB 및 XtraDB 스토리지 엔진은 MVCC(다중 버전 동시성 제어)를 통해 팬텀 읽기 문제를 해결합니다.
반복 읽기는 Mysql의 기본 트랜잭션 격리 수준입니다. InnoDB는 주로 MVVC를 사용하여 높은 동시성을 확보하고 팬텀 읽기를 방지하기 위해 next-key-locking이라는 전략을 사용합니다.
직렬화 가능(직렬화 가능)
- 직렬화 가능은 가장 높은 격리 수준입니다. 트랜잭션을 강제로 직렬화하여 앞서 언급한 팬텀 읽기 문제를 방지합니다. 간단히 말해서, 직렬화 가능은 읽은 데이터의 모든 행에 잠금을 추가하므로 많은 시간 초과 및 잠금 획득 문제가 발생할 수 있습니다. 이 격리 수준은 실제 애플리케이션에서는 거의 사용되지 않으며 데이터 일관성을 보장하는 데 매우 필요하고 동시성의 부재가 허용되는 경우에만 고려해야 합니다.
격리 수준
ANSI SQL92 P68-69
레벨(격리 수준)
Dirty Read(더티 읽기)
Non-repeatable read(반복 불가능 읽기) |
Phantom(팬텀 읽기) | |
|
커밋되지 않은 읽기(커밋되지 않은 콘텐츠 읽기)
✓
✓ |
✓ |
|
커밋된 읽기(커밋된 콘텐츠 읽기) |
×
✓ |
✓ | | 반복 읽기(반복 가능 읽기) |
×
× |
✓ |
|
직렬화 가능(Serialized) |
×
× |
× |
|
|
추천 학습: "mysql 비디오 튜토리얼
》
위 내용은 SQL92 표준의 네 가지 격리 수준을 요약합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!