데이터베이스 격리의 네 가지 수준은 다음과 같습니다. 1. 커밋되지 않은 콘텐츠 읽기 2. 제출된 콘텐츠 읽기 4. 직렬화 가능. 격리 수준은 서로 다른 잠금 유형을 사용하여 구현됩니다. 동일한 데이터를 읽으면 더티 읽기(Dirty Read), 팬텀 읽기(Phantom Read) 등의 문제가 발생할 수 있습니다.
이 문서의 운영 환경: Windows 7 시스템, Dell G3 컴퓨터, mysql8.
4가지 데이터베이스 격리 수준은 다음과 같습니다.
커밋되지 않은 읽기(커밋되지 않은 콘텐츠 읽기) #🎜🎜 #
이 격리 수준에서는 모든 트랜잭션이 커밋되지 않은 다른 트랜잭션의 실행 결과를 볼 수 있습니다. 이 격리 수준은 성능이 다른 수준보다 그다지 좋지 않기 때문에 실제 응용 프로그램에서는 거의 사용되지 않습니다. 커밋되지 않은 데이터를 읽는 것을 더티 읽기(dirty read)라고도 합니다.Read Committed
이는 대부분의 데이터베이스 시스템에 대한 기본 격리 수준입니다(MySQL 기본값은 아님). 이는 격리의 간단한 정의를 충족합니다. 트랜잭션은 커밋된 트랜잭션에 의해 변경된 내용만 볼 수 있습니다. 이 격리 수준은 소위 반복 불가능한 읽기도 지원합니다. 동일한 트랜잭션의 다른 인스턴스가 인스턴스 처리 중에 새로운 커밋을 가질 수 있으므로 동일한 선택이 다른 결과를 반환할 수 있기 때문입니다.반복 읽기(재읽기 가능)
이는 MySQL의 기본 트랜잭션 격리 수준으로, 동일한 트랜잭션의 여러 인스턴스가 동시에 읽기 데이터를 가져올 때 동일한 데이터 행이 표시됩니다. 그러나 이론적으로 이는 또 다른 까다로운 문제, 즉 팬텀 읽기(Phantom Read)로 이어집니다. 간단히 말해서, 팬텀 읽기는 사용자가 특정 범위의 데이터 행을 읽을 때 다른 트랜잭션이 해당 범위에 새 행을 삽입하는 것을 의미합니다. 사용자가 해당 범위의 데이터 행을 읽으면 새로운 "팬텀"이 있음을 알게 됩니다. . InnoDB와 Falcon 스토리지 엔진은 다중 버전 동시성 제어(MVCC, Multiversion Concurrency Control) 메커니즘을 통해 이 문제를 해결합니다.Serialized
이것은 가장 높은 격리 수준으로, 트랜잭션을 강제로 주문하여 트랜잭션이 서로 충돌하는 것을 불가능하게 합니다. , 이로써 팬텀 읽기 문제를 해결합니다. 즉, 읽은 각 데이터 행에 공유 잠금을 추가합니다. 이 수준에서는 시간 초과와 잠금 경합이 많이 발생할 수 있습니다.격리 수준으로 인한 문제
이 네 가지 격리 수준은 서로 다른 잠금 유형을 사용하여 구현되므로 데이터가 유출되기 쉽습니다. 문제에. 예:Dirty Read:
A 트랜잭션이 데이터 조각을 업데이트했으며 현재 다른 트랜잭션이 해당 데이터를 읽고 있습니다. 어떤 이유로 이전 롤백에서 데이터를 읽는 경우 후자 트랜잭션에서 읽은 데이터가 올바르지 않습니다.반복 불가능한 읽기:
데이터가 트랜잭션의 두 쿼리 간에 일치하지 않습니다(두 개일 수 있음). 쿼리 프로세스 중에 원본 트랜잭션에 의해 업데이트된 데이터가 삽입되었습니다.Phantom 읽기:
트랜잭션의 두 쿼리에 있는 데이터 항목 수가 일치하지 않습니다. 예를 들어 하나의 트랜잭션 쿼리 여러 열( 행)에 데이터가 있지만 이번에는 다른 트랜잭션이 여러 개의 새로운 데이터 열을 삽입했습니다. 이전 트랜잭션의 후속 쿼리에서는 이전에 없었던 여러 데이터 열이 있음을 발견합니다. MySQL에서는 이 4가지 격리 수준을 구현하고 있으며, 발생할 수 있는 문제는 다음과 같습니다.격리 수준 | 더티 읽기 | 반복 불가능한 읽기 | #🎜 🎜 #환상 독서|
√ | √ | √# 🎜🎜# | |
X | √ | √ | #🎜 🎜 #반복 읽기 |
직렬화 가능 | X | X# 🎜 🎜# | 🎜#요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들께 도움이 되길 바랍니다|
[추천 과정: | MySQL 튜토리얼】#🎜🎜 # |
위 내용은 데이터베이스 격리의 4가지 수준은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!