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

13.2. 거래 격리

SQL표준 정의

더러운 읽기

트랜잭션은 동시에 작성된 데이터를 읽습니다

반복 할 수없는 읽기

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

Phantom Read

트랜잭션은 쿼리 세트를 다시 실행합니다

4 개의 트랜잭션 격리 수준과 해당표 13-1.

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

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

inpostgresql, 당신은 할 수 있습니다postgresql

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

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

Committed 읽기기본값입니다postgresql.select쿼리 (afor절) 앞에 커밋 된 데이터 만 본다select쿼리에는 스냅 샷이 나타납니다select효과가 보입니다select명령을 볼 수 있습니다select.

업데이트, 삭제, 선택을 선택하십시오공유 선택명령은와 동일하게 행동합니다.selectin여기서조항) 업데이트 된 버전이선택을 선택하십시오and공유 선택,이

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

시작;

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

더 복잡한 사용은 바람직하지 않은 결과를 읽을 수 있습니다삭제존재하는 데이터에서 작동하는 명령웹 사이트is웹 사이트동등한9and10:

시작;

삭제도 영향을 미치지 않습니다웹 사이트. hits = 10전후에 행업데이트. 이것9건너 뛰고업데이트완성 및삭제잠금을 얻고 새 행 값은 아니오입니다10그러나11, 더 이상 기준과 일치하지 않습니다.

read commited mode가 새 새로 각 명령을 시작하기 때문에단일명령은 절대적으로 본다

Read Commited에 의해 제공되는 부분 트랜잭션 격리

13.2.2. 직렬화 가능한 분리

SERIALIZALE분리 레벨

트랜잭션이 직렬화 가능한 레벨을 사용하는 경우 Aselect쿼리는 데이터 만 보입니다거래, 시작 시점이 아닙니다selecta 명령단일거래를 참조하십시오

업데이트, 삭제, 선택을 선택하십시오공유 선택명령은와 동일하게 행동합니다.selectin

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

직렬화 가능한 트랜잭션은 수정하거나 잠금 할 수 없기 때문입니다

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

거래 만 업데이트해야 할 수도 있습니다

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

13.2.2.1. 직렬화 가능한 분리

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

클래스 | 값

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

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

그런 다음 결과 (30)을로 삽입합니다.value새 행으로클래스 = 2.

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

결과 300을 얻습니다.클래스 =. 그런 다음 두 거래가 커밋됩니다.

진정한 수학적 직렬화 가능성을 보장하기 위해술어 잠금, 즉 a여기서a선택 ... 여기서 클래스 = 1, a[1]postgresql술어를 구현하지 않습니다

소개가 불가능한 경우

노트

[1]

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