>  기사  >  데이터 베이스  >  MySQL의 4가지 격리 수준 소개

MySQL의 4가지 격리 수준 소개

不言
不言앞으로
2019-01-30 09:57:432471검색

이 기사는 MySQL의 4가지 격리 수준을 소개합니다. 이는 특정 참고 가치가 있습니다. 도움이 필요한 친구가 참고할 수 있기를 바랍니다.

트랜잭션 격리는 생각보다 복잡합니다. SQL 표준에는 4가지 수준의 격리 수준이 정의되어 있습니다. 일반적으로 낮은 수준의 격리는 더 높은 동시성을 수행하고 시스템 오버헤드를 낮출 수 있습니다(권장 과정: MySQL 비디오 자습서)

READ UNCOMMITTED

이 수준은 Uncommitted Read입니다. 이 수준에서는 트랜잭션의 수정 사항이 커밋되지 않은 경우에도 다른 트랜잭션에서 볼 수 있습니다. 트랜잭션은 커밋되지 않은 데이터를 읽을 수 있으며, 이를 Dirty Read라고도 합니다. 이 수준은 많은 문제를 일으키며 성능 측면에서는 다른 수준보다 그다지 좋지는 않지만 다른 수준의 이점이 많이 부족합니다. 아주 꼭 필요한 이유가 있지 않는 이상 실제 응용에서는 거의 사용되지 않습니다.

READ COMMITTED

이 레벨은 읽기로 제출입니다. 이는 대부분의 데이터베이스 시스템의 기본 격리 수준이지만 MySQL은 아닙니다. 이 수준은 격리의 간단한 정의를 충족합니다. 즉, 트랜잭션이 시작되면 커밋된 트랜잭션에 의해 수정된 사항만 "볼" 수 있습니다. 즉, 트랜잭션이 처음부터 커밋될 때까지 수정 사항이 다른 트랜잭션에 표시되지 않습니다. 동일한 쿼리를 두 번 실행하면 다른 결과가 발생할 수 있으므로 이 수준을 반복 불가능한 읽기라고도 합니다.

REPEATABLE READ

이 수준은 MySQL의 기본 트랜잭션 격리 수준인 반복 읽기입니다. 이는 더티 읽기 문제를 해결하고 동일한 트랜잭션에서 동일한 레코드를 여러 번 읽은 결과가 일관되도록 보장합니다.

그러나 이론적으로 이 수준은 또 다른 문제인 환상 독서를 해결할 수 없습니다. 소위 팬텀 읽기는 트랜잭션이 특정 범위의 레코드를 읽을 때 다른 트랜잭션이 해당 범위에 새 레코드를 삽입하는 것을 의미합니다. 이전 트랜잭션이 해당 범위의 레코드를 다시 읽으면 팬텀 움직임이 생성됩니다.

팬텀 읽기 예: 첫 번째 트랜잭션은 테이블의 데이터를 수정합니다. 예를 들어 이 수정에는 테이블의 "모든 데이터 행"이 포함됩니다. 동시에 두 번째 트랜잭션도 이 테이블의 데이터를 수정합니다. 이 수정으로 인해 테이블에 "새 데이터 행"이 삽입됩니다. 그러면 나중에 첫 번째 트랜잭션을 수행하는 사용자는 마치 환각에 빠진 것처럼 테이블에 여전히 수정되지 않은 데이터 행이 있다는 것을 알게 될 것입니다. InnoDB 스토리지 엔진은 다중 버전 동시성 제어를 통해 환상 읽기 문제를 해결합니다.

SERIALIZABLE

이 수준은 직렬화 가능하며 가장 높은 격리 수준입니다. 트랜잭션을 순차적으로 실행함으로써 앞서 언급한 팬텀 읽기 문제를 방지합니다. 즉, 이 수준은 읽은 데이터의 모든 행을 잠그므로 많은 시간 초과 및 잠금 경합 문제가 발생할 수 있습니다.


이 격리 수준은 실제 애플리케이션에서는 거의 사용되지 않으며 데이터 일관성을 보장하는 데 매우 필요하고 동시성이 허용되지 않는 경우에만 고려해야 합니다.

격리 수준READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READ직렬화 가능
더티 읽기 가능 비반복 읽기 가능 팬텀 읽기 가능 잠긴 읽기
아니오
No Yes Yes No
No No Yes No
아니요 아니요 아니오

위 내용은 MySQL의 4가지 격리 수준 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제