Postgresql 9.0.23 문서 | ||||
---|---|---|---|---|
메이저 토토 사이트 : 문서 : 9.0 : 소개 | 범퍼카 토토 : 문서 : 9.0 : 동시성 제어 | 13 장. | PostgreSQL : 문서 : 9.0 : 명시 적 와이즈 토토 |
SQL표준 정의
트랜잭션은 동시에 작성된 데이터를 읽습니다
트랜잭션은 이전에 읽은 데이터를 다시 읽습니다
트랜잭션은 쿼리 세트를 다시 실행합니다
4 개의 트랜잭션 격리 수준과 해당표 13-1.
표 13-1.SQL거래 격리 수준
격리 레벨 | 더러운 읽기 | 반복 할 수없는 읽기 | Phantom Read |
---|---|---|---|
커밋되지 않은 읽기 | 가능 | 가능 | 가능 |
Committed 읽기 | 불가능 | 가능 | 가능 |
반복 가능한 읽기 | 불가능 | 불가능 | 가능 |
SERIALIZALE | 불가능 | 불가능 | 불가능 |
inpostgresql, 당신은 할 수 있습니다postgresql만
거래의 거래 격리 수준을 설정하려면 사용세트.
Committed 읽기기본값입니다postgresql.select쿼리 (afor절) 앞에 커밋 된 데이터 만 본다select쿼리에는 스냅 샷이 나타납니다select효과가 보입니다select명령을 볼 수 있습니다select.
업데이트, 삭제, 선택을 선택하십시오및공유 선택명령은와 동일하게 행동합니다.selectin여기서조항) 업데이트 된 버전이선택을 선택하십시오and공유 선택,이
위 규칙으로 인해 업데이트가 가능합니다.
시작;
그러한 거래가 동시에 변경하려고한다면
더 복잡한 사용은 바람직하지 않은 결과를 읽을 수 있습니다삭제존재하는 데이터에서 작동하는 명령웹 사이트is웹 사이트동등한9and10:
시작;
삭제도 영향을 미치지 않습니다웹 사이트. hits = 10전후에 행업데이트. 이것9건너 뛰고업데이트완성 및삭제잠금을 얻고 새 행 값은 아니오입니다10그러나11, 더 이상 기준과 일치하지 않습니다.
read commited mode가 새 새로 각 명령을 시작하기 때문에단일명령은 절대적으로 본다
Read Commited에 의해 제공되는 부분 트랜잭션 격리
SERIALIZALE분리 레벨
트랜잭션이 직렬화 가능한 레벨을 사용하는 경우 Aselect쿼리는 데이터 만 보입니다거래, 시작 시점이 아닙니다selecta 명령단일거래를 참조하십시오
업데이트, 삭제, 선택을 선택하십시오및공유 선택명령은와 동일하게 행동합니다.selectin
오류 : 동시 업데이트로 인해 액세스를 직렬화 할 수 없습니다
직렬화 가능한 트랜잭션은 수정하거나 잠금 할 수 없기 때문입니다
응용 프로그램 이이 오류 메시지를 받으면해야합니다
거래 만 업데이트해야 할 수도 있습니다
직렬화 가능한 모드는 엄격한 보증을 제공합니다
직관적 인 의미 (및 수학적 정의)의"Serializable"실행입니다표 13-1ispostgresql'S 직렬화 가능보장하지 않습니다. 예를 들어,Mytab, 처음에는
클래스 | 값
직렬화 가능한 트랜잭션이 계산된다고 가정합니다.
mytab에서 sum (value)을 선택하여 클래스 = 1;
그런 다음 결과 (30)을로 삽입합니다.value새 행으로클래스 = 2.
mytab에서 sum (value)을 선택하여 클래스 = 2;
결과 300을 얻습니다.클래스 =. 그런 다음 두 거래가 커밋됩니다.
진정한 수학적 직렬화 가능성을 보장하기 위해술어 잠금, 즉 a여기서a선택 ... 여기서 클래스 = 1, a[1]postgresql술어를 구현하지 않습니다
소개가 불가능한 경우
[1] |
본질적으로, 술어 잠금 시스템은 팬텀을 방지합니다 |