이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 13.2. 무지개 토토 격리버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

12.2. 거래 격리

theSQL표준 정의

더러운 읽기

토토은 동시에 작성된 데이터를 읽습니다

반복 할 수없는 읽기

트랜잭션은 이전에 읽은 데이터를 다시 읽습니다

Phantom Read

토토은 쿼리 세트를 다시 실행합니다

4 개의 거래테이블.

표 12-1.SQL거래 격리 수준

격리 레벨 더러운 읽기 반복 할 수없는 읽기 Phantom Read
커밋되지 않은 읽기 가능 가능 가능
Committed 읽기 불가능 가능 가능
반복 가능한 읽기 불가능 불가능 가능
SERIALIZABLE 불가능 불가능 불가능

inPostgreSQL, 당신은 할 수 있습니다PostgreSQL두 개만 제공합니다

거래의 거래 격리 수준을 설정하려면 사용세트.

12.2.1. 헌신적 인 격리를 읽으십시오

Committed기본값입니다PostgreSQL.select쿼리는 이전에 커밋 된 데이터 만 볼 수 있습니다selectselect쿼리에는 스냅 샷이 나타납니다select명령은 다른 데이터를 볼 수 있습니다.select.

업데이트, 삭제선택을 선택하십시오명령은와 동일하게 행동합니다select대상 행 검색 측면에서 :여기서절)

위 규칙으로 인해 업데이트가 가능합니다.

시작;

그러한 두 거래가 동시에 변경하려고한다면

읽기 커밋 모드에서 각 새로운 명령은단일우리가 보는 명령

Read Commited에 의해 제공되는 부분 토토 격리

12.2.2. 직렬화 가능한 분리

레벨SERIALIZABLE제공

트랜잭션이 직렬화 가능한 수준에있을 때 Aselect쿼리는 커밋 된 데이터 만 볼 수 있습니다select이전 업데이트의 효과가 나타납니다selectselect단일 트랜잭션 내에서 명령

업데이트, 삭제선택을 선택하십시오명령은와 동일하게 행동합니다select대상 행 검색 측면에서 :

오류 : 동시 업데이트로 인해 액세스를 직렬화 할 수 없습니다

직렬화 가능한 트랜잭션은 행을 수정할 수 없기 때문입니다

응용 프로그램 이이 오류 메시지를 받으면해야합니다

거래 만 업데이트하는 것만 재조정해야 할 수도 있습니다.

직렬화 가능한 모드는 엄격한 보증을 제공합니다

12.2.2.1. 직렬화 가능한 분리

직관적 인 의미 (및 수학적 정의)의"Serializable"실행입니다표 12-1isPostgreSQL'S 직렬화 가능보장하지 않습니다. 예를 들어,Mytab, 처음에는

클래스 | 값

직렬화 가능한 트랜잭션이 계산된다고 가정합니다

mytab에서 sum (value)을 선택하여 클래스 = 1;

그런 다음 결과 (30)을로 삽입합니다.value새 행으로클래스= 2. 동시에 직렬화 가능합니다

mytab에서 sum (value)을 선택하여 클래스 = 2;

결과 300을 얻고 새 행에 삽입됩니다.클래스= 1. 그런 다음 둘 다

진정한 수학적 직렬화 가능성을 보장하기 위해술어 잠금, 즉 a여기서a선택 ... 여기서 클래스 = 1, a[1]PostgreSQL

이 경우 무의미한 가능성이없는 경우

노트

[1]

본질적으로, 술어 잠금 시스템은 팬텀을 방지합니다