집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에는 여러 격리 수준이 있습니다.
MySQL에는 4가지 격리 수준이 있습니다. 1. 커밋되지 않은 콘텐츠를 읽습니다. 이 격리 수준에서는 모든 트랜잭션이 커밋되지 않은 다른 트랜잭션의 실행 결과를 볼 수 있습니다. 2. 제출 내용을 읽으십시오. 거래가 제출된 후에만 수정된 데이터가 다른 항목에 표시됩니다. 3. 반복 가능한 읽기, 트랜잭션 실행 중에 표시되는 데이터는 트랜잭션이 시작될 때 표시되는 데이터와 항상 일치합니다. 4. 트랜잭션을 강제로 정렬하여 서로 충돌하는 것을 방지함으로써 팬텀 읽기 문제를 해결합니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
트랜잭션에는 ACID 특성, 즉 원자성, 일관성, 격리성, 내구성, 즉 원자성, 일관성, 격리성 및 내구성이 있습니다.
Mysql의 4가지 격리 수준
SQL 표준은 4가지 유형의 격리 수준을 정의합니다. 여기에는 트랜잭션 내부 및 외부의 변경 사항이 표시되고 보이지 않는 것을 제한하는 특정 규칙이 포함됩니다. 격리 수준이 낮을수록 일반적으로 더 높은 동시성을 지원하고 시스템 오버헤드가 더 낮습니다. [동영상 튜토리얼 추천: Mysql 튜토리얼]
1. 커밋되지 않은 콘텐츠 읽기(read-uncommitted)
이 격리 수준에서는 모든 트랜잭션이 커밋되지 않은 다른 트랜잭션의 실행 결과를 볼 수 있습니다. 이 격리 수준은 성능이 다른 수준보다 그다지 좋지 않기 때문에 실제 응용 프로그램에서는 거의 사용되지 않습니다.
이 격리 수준에서 발생하는 문제는 Dirty Read, 즉 커밋되지 않은 데이터를 읽는 것입니다.
2. 읽기 커밋
이것은 대부분의 데이터베이스 시스템의 기본 격리 수준입니다(MySQL 기본값은 아님). 이는 격리의 간단한 정의를 충족합니다. 트랜잭션은 커밋된 트랜잭션에 의해 변경된 내용만 볼 수 있습니다.
이 격리 수준의 문제점은 다음과 같습니다. 반복 불가능 읽기, 즉 반복 불가능 읽기는 동일한 트랜잭션에서 정확히 동일한 select 문을 실행할 때 다른 결과가 나타날 수 있음을 의미합니다.
이런 상황이 발생할 수 있는 이유는 다음과 같습니다.
1) 교차 트랜잭션에 새로운 커밋이 있어 데이터가 변경됩니다.
2) 데이터베이스가 여러 인스턴스에 의해 운영되는 경우 동일한 트랜잭션의 다른 트랜잭션이 발생합니다. 인스턴스는 인스턴스 처리 중에 새로운 커밋을 가질 수 있습니다
3. 반복 읽기(repeatable-read)
이것은 동일한 트랜잭션의 여러 인스턴스가 동시에 데이터를 읽도록 보장하는 MySQL의 기본 트랜잭션 격리 수준입니다. , 동일한 데이터 행이 표시됩니다.
그러나 이론적으로 이는 또 다른 까다로운 문제인 Phantom Read로 이어질 것입니다.
간단히 말하면 팬텀 읽기는 사용자가 특정 범위의 데이터 행을 읽을 때 다른 트랜잭션이 해당 범위에 새 행을 삽입하는 것을 의미합니다. 범위. "팬텀" 라인.
InnoDB 및 Falcon 스토리지 엔진은 다중 버전 동시성 제어(MVCC, Multiversion Concurrency Control) 메커니즘을 통해 이 문제를 해결합니다.
4. 직렬화 가능
이것은 가장 높은 격리 수준으로 트랜잭션이 서로 충돌하지 않도록 강제로 주문하여 팬텀 읽기 문제를 해결합니다. 즉, 읽은 각 데이터 행에 공유 잠금을 추가합니다. 이 수준에서는 시간 초과와 잠금 경합이 많이 발생할 수 있습니다.
이 수준에서는 시간 초과 및 잠금 경합이 많이 발생할 수 있습니다.
추천 학습: mysql 비디오 튜토리얼
위 내용은 MySQL에는 여러 격리 수준이 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!