PostgreSQL | ||||
---|---|---|---|---|
범퍼카 토토 : 문서 : 8.0 : 범퍼카 토토 제어 | 빠른 뒤로 | 12 장. | 빠른 전달 | 다음 |
theSQL표준 정의
4 개의 거래테이블.
표 12-1.SQL거래 격리 수준
격리 레벨 | 더러운 읽기 | 반복 할 수없는 읽기 | Phantom Read |
---|---|---|---|
커밋되지 않은 읽기 | 가능 | 가능 | 가능 |
Committed 읽기 | 불가능 | 가능 | 가능 |
반복 가능한 읽기 | 불가능 | 불가능 | 가능 |
SERIALIZABLE | 불가능 | 불가능 | 불가능 |
inPostgreSQL, 당신은 할 수 있습니다PostgreSQL두 개만 제공합니다
거래의 거래 격리 수준을 설정하려면 사용세트.
Committed기본값입니다PostgreSQL.select쿼리는 이전에 커밋 된 데이터 만 볼 수 있습니다selectselect쿼리에는 스냅 샷이 나타납니다select명령은 다른 데이터를 볼 수 있습니다.select.
업데이트, 삭제및선택을 선택하십시오명령은와 동일하게 행동합니다select대상 행 검색 측면에서 :여기서절)
위 규칙으로 인해 업데이트가 가능합니다.
시작;
그러한 두 거래가 동시에 변경하려고한다면
읽기 커밋 모드에서 각 새로운 명령은단일우리가 보는 명령
Read Commited에 의해 제공되는 부분 토토 격리
레벨SERIALIZABLE제공
트랜잭션이 직렬화 가능한 수준에있을 때 Aselect쿼리는 커밋 된 데이터 만 볼 수 있습니다select이전 업데이트의 효과가 나타납니다selectselect단일 트랜잭션 내에서 명령
업데이트, 삭제및선택을 선택하십시오명령은와 동일하게 행동합니다select대상 행 검색 측면에서 :
오류 : 동시 업데이트로 인해 액세스를 직렬화 할 수 없습니다
직렬화 가능한 트랜잭션은 행을 수정할 수 없기 때문입니다
응용 프로그램 이이 오류 메시지를 받으면해야합니다
거래 만 업데이트하는 것만 재조정해야 할 수도 있습니다.
직렬화 가능한 모드는 엄격한 보증을 제공합니다
직관적 인 의미 (및 수학적 정의)의"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] |
본질적으로, 술어 잠금 시스템은 팬텀을 방지합니다 |
범퍼카 토토 : 문서 : 8.0 : 범퍼카 토토 제어 | 홈 | 다음 |
동시성 | up | 명시 적 |