트랜잭션 격리 수준의 MySQL의 심층 이해

MySQL은 각각 네 개의 트랜잭션 격리 수준을 지원합니다

커밋이 커밋되지 않은 읽기 읽기

최선을 다하고 커밋 된 읽기 읽기

반복 읽기 반복 읽기이 개념은, 정교한 다음과 같은 것을 * 참고 혼합이 용이

직렬화 직렬화 트랜잭션 작업

1.Read 언은 확약 읽기

트랜잭션 격리 수준이 커밋되지 않은 읽기하면 다른 트랜잭션이 수정되었지만 다른 후속 트랜잭션이 다시 발생 더티 읽기, 압연 경우 아직 커밋되지 않은으로, 당신은 문의 할 수 있습니다. 가장 낮은 트랜잭션 격리 수준입니다

최선을 다하고 2.Read 커밋 된 읽기

트랜잭션 격리 수준이 커밋 된 읽기 때 수정되었지만 아직 커밋하지 된 다른 데이터의 일을 조사하지 않으며, 더러운 읽기를 방지하기 위해, 모든 데이터가 다른 문제에 제출되었습니다 읽어 보시기 바랍니다.

다음과 같이 그러나 새로운 문제 비 반복 읽기에 문제가있을 것입니다

읽기 최선을 다하고 수준에서 트랜잭션을 열고 수행

책에서 선택 * 어디 이름 = "컴퓨터 원리"

구입 가격을 포함하여 책의 수 있지만,이 시간에 예약 정보 조회는 다른 트랜잭션이 책의 수를 수정 한 다음, 다음 첫 번째 트랜잭션을 제출되었습니다

이름 = "컴퓨터 원리"쿼리 책의 수를 찾을 경우 다음 쿼리가 일관성이 후, 즉 비 반복 읽기 문제가되기 전에, 문제가 있었다 변경되었습니다 책에서 * 선택을 사용

 3.Repeatable 읽기 반복 읽기

반복 읽기 트랜잭션 격리 수준은 비 반복 읽기의 문제를 방지 할 수 있지만, 변경 또는 기타 거래를 차단을 수정할 관심을 지불 할 다른 문제를 금지하지 않지만,이 격리 수준, 여러 쿼리와 같은 조건은 스냅 샷을 사용하여 첫 번째 쿼리의 결과 것을, 다른 트랜잭션은 여전히 ​​변경하고 데이터를 제출할 수 있습니다. 결과는 스냅 샷이지만,하지만 당신은 여전히 ​​트랜잭션의 일관성을 보장 할 수 있으며, 다음과 같이 확인할 수 있습니다 

예를 들면 

반복 읽기에 대한 트랜잭션 격리 수준

컴퓨터 책의 개방 문의 거래 원칙의 숫자

 여기서 이름 = "컴퓨터 원리"책에서 총을 선택

(20)의 합계 값

그런 다음 책의 컴퓨터 이론의 수를 변경에서 다른 트랜잭션이 29이고 제출되었습니다,

트랜잭션을 다시 실행

 여기서 이름 = "컴퓨터 원리"책에서 총을 선택

아직 전체 (20)의 값 (상기 설명이 스냅 샷이다)

트랜잭션 업데이트 작업이 수행된다 

업데이트 책 설정 총 = 총 - 1 곳 이름 = "컴퓨터 원리"

이름을 다시 트랜잭션의 일관성을 보장하기 위해 (28)의 총을 발견 할 것이다 "컴퓨터의 원리를"= 책에서 쿼리를 선택합니다 총.

반복 읽기 격리 수준에서 여전히 새로운 문제가있다, 팬텀 읽기

팬텀은 하나의 트랜잭션 내에서 수단을 읽고, 첫 번째 쿼리 기록은, 아니 찾았지만,이 기록은 실제로 성공할 수, 다시 같은 기록을 읽을 존재하지 않는 업데이트하려고하면, 그것은 놀라운 그는 나타났다.

4.Serializable 직렬화 트랜잭션 작업

오염을 방지하는 가장 높은 트랜잭션 격리 수준은 반복 불가능한 읽기, 유령 읽기, 읽기

이 격리 수준에서 열린 트랜잭션이 쿼리를 실행, 기타 사항의 범위에서 쿼리 데이터가 차단됩니다, 변경하거나 추가 또는 삭제 될 수 있습니다, 순서에 따라 집행 지점,

예를 들면

트랜잭션 격리 수준은 직렬화로 설정 

열기 트랜잭션 실행을 선택 * 책에서 어디 이름 = "컴퓨터의 원리" 

다른 문제는 한 추가, 변경과 같은 라인이 즉, 트랜잭션 (A)의 종료 후, 그들은 계속, 트랜잭션에 의해 실행 순서를 강제로 차단됩니다의 "컴퓨터 원리"로 이름을 삭제합니다.

책에서 선택 트랜잭션 실행 *이 테이블에 수행 된 다른 트랜잭션에 추가 및 삭제가 순차적으로 실행 트랜잭션에 의해 강제 차단 될 열려있는 트랜잭션 경우, 즉, 트랜잭션 (A)의 종료 후, 그들은 계속된다.

위의 예는 다른 MySQL의 MySQL의 기본 트랜잭션 격리 수준에서 확인 된 반복 읽기입니다

추천

출처www.cnblogs.com/imfx/p/11269045.html