이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 토토 꽁 머니버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

사설 토토

이름

LOCK  --  테이블을 명시적으로 잠급니다.

시놉시스

사설 토토 [ 표 ]이름[, ...]
사설 토토 [ 표 ]이름[, ...] IN사설 토토 모드모드

어디서사설 토토 모드다음 중 하나입니다:

        액세스 공유 | 행 공유 | 행 독점 | 업데이트 독점 공유 |
        공유 | 공유 행 독점 | 독점 | 액세스 독점

입력

이름

기존 이름(선택적으로 스키마 한정) 잠글 테이블.

액세스 공유 모드

이것은 가장 덜 제한적인 사설 토토 모드입니다. 충돌한다 ACCESS EXCLUSIVE 모드에서만 가능합니다. 이는 A를 보호하는 데 사용됩니다. 테이블이 동시 수정되지 않습니다.테이블 변경, 드롭 표그리고진공이 가득 참명령.

참고:선택명령은 참조된 항목에서 이 모드의 사설 토토을 획득합니다. 테이블. 일반적으로 테이블만 읽는 쿼리는 수정하지 않으면 이 사설 토토을 획득하게 됩니다. 모드.

행 공유 모드

EXCLUSIVE 및 ACCESS EXCLUSIVE 사설 토토과 충돌 모드.

참고:선택 대상 업데이트명령은 다음에서 이 모드의 사설 토토을 획득합니다. 대상 테이블(들에 추가로)액세스 공유다른 테이블에 대한 사설 토토 참조되었지만 선택되지 않음업데이트용).

행 독점 모드

SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE와 충돌 및 액세스 독점 모드.

참고:명령어업데이트, 삭제삽입다음에서 이 사설 토토 모드를 획득하세요. 대상 테이블(추가로액세스 공유다른 항목에 대한 사설 토토 참조 테이블). 일반적으로 이 사설 토토 모드는 데이터를 수정하는 모든 쿼리에 의해 획득됩니다. 테이블.

업데이트 독점 모드 공유

공유 업데이트 독점, 공유, 공유와 충돌 ROW EXCLUSIVE, EXCLUSIVE 및 ACCESS EXCLUSIVE 모드. 이 모드는 동시 스키마 변경으로부터 테이블을 보호합니다. 그리고진공실행됩니다.

참고:취득자진공(없이전체).

공유 모드

ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE와 충돌, 공유 행 독점, 독점 및 액세스 독점 모드. 이 모드는 동시 데이터로부터 테이블을 보호합니다. 변경됩니다.

참고:취득자색인 생성.

공유 행 독점 모드

ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE와 충돌, 공유, 공유 행 독점, 독점 및 액세스 독점 모드.

참고:이 사설 토토 모드는 자동으로 이루어지지 않습니다. 임의의 사람이 인수함포스트그레SQL명령.

독점 모드

ROW SHARE, ROW EXCLUSIVE, SHARE 업데이트와 충돌 독점, 공유, 공유 행 독점, 독점 및 액세스 독점 모드. 이 모드에서는 동시 실행만 허용됩니다. ACCESS SHARE, 즉 테이블의 읽기만 진행할 수 있습니다. 이 사설 토토을 보유한 트랜잭션과 병행하여 모드.

참고:이 사설 토토 모드는 자동으로 이루어지지 않습니다. 임의의 사람이 인수함포스트그레SQL명령.

액세스 독점 모드

모든 사설 토토 모드와 충돌합니다. 이 모드는 다음을 보장합니다. 보유자는 액세스하는 유일한 거래입니다. 어떤 식으로든 테이블에 앉으세요.

참고:취득자변경 표, 드롭 테이블진공이 가득 참문장. 이 은(는) 기본 사설 토토 모드이기도 합니다.락 테이블하지 않는 진술 모드를 명시적으로 지정하세요.

출력

락 테이블

사설 토토이 성공적으로 획득되었습니다.

오류이름: 테이블은 그렇지 않습니다. 존재합니다.

다음의 경우 메시지가 반환되었습니다.이름존재하지 않습니다.

설명

사설 토토 테이블테이블 수준을 얻습니다. 사설 토토, 필요한 경우 충돌하는 사설 토토이 있을 때까지 대기 출시되었습니다. 일단 획득하면 나머지 기간 동안 사설 토토이 유지됩니다. 현재 거래. (없습니다사설 토토 해제 표명령; 사설 토토은 항상 트랜잭션 시 해제됩니다. 끝.)

참조하는 명령에 대해 자동으로 사설 토토을 획득할 때 테이블,포스트그레SQL항상 사용함 가능한 최소한의 제한적인 사설 토토 모드입니다.락 테이블필요할 수 있는 경우를 제공합니다. 더 제한적인 사설 토토.

예를 들어, 응용 프로그램이 READ에서 트랜잭션을 실행한다고 가정합니다. COMMITTED 격리 수준이며 해당 데이터가 테이블은 트랜잭션 기간 동안 안정적으로 유지됩니다. 받는 사람 이를 달성하면 테이블에 대한 SHARE 사설 토토 모드를 얻을 수 있습니다. 쿼리하기 전에. 이렇게 하면 동시 데이터 변경을 방지하고 이후에 테이블을 읽을 때 안정적인 뷰를 볼 수 있는지 확인하세요. SHARE 사설 토토 모드가 ROW와 충돌하기 때문에 커밋된 데이터 작성자가 획득한 독점 사설 토토 및 귀하의락 테이블이름IN 공유 모드문은 동시 보유자가 있을 때까지 기다립니다. ROW EXCLUSIVE 모드 커밋 또는 롤백. 따라서 일단 취득하면 사설 토토, 아직 커밋되지 않은 쓰기가 없습니다. 또한 사설 토토을 해제할 때까지는 아무것도 시작할 수 없습니다.

참고:다음을 실행할 때 비슷한 효과를 얻으려면 SERIALIZABLE 격리 수준에서 트랜잭션을 수행하려면 다음을 수행해야 합니다. 실행하다락 테이블성명 실행하기 전에DML성명. 직렬화 가능한 트랜잭션의 데이터 보기는 다음과 같습니다. 처음에는 동결됨DML문이 시작됩니다. 나중에사설 토토할 것이다 여전히 동시 쓰기를 방지하지만 --- 하지만 보장하지는 않습니다. 트랜잭션이 읽은 내용은 최신 내용에 해당합니다. 약속된 가치.

이런 종류의 거래가 다음의 데이터를 변경하려는 경우 테이블에 있는 경우 SHARE ROW EXCLUSIVE 사설 토토 모드를 사용해야 합니다. 공유 모드 대신. 이를 통해 단 한 번의 거래만 보장됩니다. 이 유형은 한 번에 실행됩니다. 이것이 없으면 교착 상태가 발생할 수 있습니다. 두 트랜잭션이 모두 SHARE 모드를 획득한 다음 실제로 수행하기 위한 ROW EXCLUSIVE 모드도 획득할 수 없습니다. 그들의 업데이트. (트랜잭션 자체 사설 토토은 절대로 잠기지 않습니다. 충돌이 발생하면 트랜잭션이 ROW EXCLUSIVE 모드를 획득할 수 있습니다. SHARE 모드를 보유하고 있지만 다른 사람이 SHARE를 보유하고 있는 경우에는 그렇지 않습니다. 모드.)

교착 상태를 방지하기 위해 두 가지 일반 규칙을 따를 수 있습니다. 조건:

  • 트랜잭션은 동일한 개체에 대한 사설 토토을 획득해야 합니다. 같은 순서입니다.

    예를 들어, 하나의 응용 프로그램이 R1 행과 그 이후 행을 업데이트하는 경우 동일한 트랜잭션에서 행 R2를 업데이트한 다음 두 번째 행을 업데이트합니다. 애플리케이션은 업데이트할 예정이라면 행 R2를 업데이트해서는 안 됩니다. 행 R1 이후(단일 트랜잭션에서) 대신에 첫 번째와 동일한 순서로 R1 및 R2 행을 업데이트합니다. 신청합니다.

  • 단일 객체에 여러 사설 토토 모드가 포함된 경우, 그러면 거래는 항상 가장 제한적인 것을 획득해야 합니다. 먼저 모드를 선택하세요.

    이 규칙에 대한 예는 이전에 다음과 같이 주어졌습니다. 대신 SHARE ROW EXCLUSIVE 모드의 사용에 대해 논의합니다. 공유 모드.

PostgreSQL감지합니다 교착 상태가 발생하고 적어도 하나의 대기 중인 트랜잭션이 롤백됩니다. 교착상태를 해결하세요. 코딩하는 것이 실용적이지 않은 경우 위의 규칙을 엄격히 따르도록 신청하는 것, 대안 솔루션은 거래가 완료될 때 거래를 재시도할 수 있도록 준비하는 것입니다. 교착 상태로 인해 중단되었습니다.

여러 테이블을 잠글 때 다음 명령은LOCK a, b;다음과 동일함LOCK a; 사설 토토 b;. 테이블은 하나씩 잠겨있습니다 에 지정된 순서대로사설 토토명령.

참고

액세스 공유 모드에서 사설 토토 ...요구선택에 대한 권한 대상 테이블. 다른 모든 형태의사설 토토요구업데이트및/또는삭제권한.

사설 토토내부에서만 유용합니다. 거래 블록(시작...커밋), 사설 토토은 즉시 삭제되므로 거래가 종료됩니다. 갑사설 토토명령 거래 블록 외부에 나타나는 것은 독립적인 블록을 형성합니다. 트랜잭션이 완료되자마자 사설 토토이 해제됩니다. 얻었습니다.

RDBMS사설 토토은 다음을 사용합니다. 다음 표준 용어:

독점

배타적 사설 토토은 동일한 사설 토토을 방지합니다. 유형이 부여되지 않습니다.

공유

공유 사설 토토을 사용하면 다른 사람도 동일한 유형을 보유할 수 있습니다. 사설 토토을 해제하지만 해당 EXCLUSIVE 사설 토토을 방지합니다. 부여되지 않습니다.

액세스

테이블 스키마를 잠급니다.

ROW

개별 행을 잠급니다.

포스트그레SQL팔로우하지 않습니다 이 용어가 정확히 맞습니다.락 테이블테이블 수준 사설 토토만 처리하므로 모드 이름은 ROW와 관련된 이름은 모두 잘못된 이름입니다. 이러한 모드 이름은 일반적으로 사용자의 의도를 나타내는 것으로 읽혀집니다. 잠긴 테이블 내에서 행 수준 사설 토토을 획득합니다. 또한, ROW EXCLUSIVE 모드는 이 명명 규칙을 따르지 않습니다. 정확하게 말하면 공유 가능한 테이블 사설 토토이기 때문입니다. 명심하세요 모든 사설 토토 모드는 지금까지 동일한 의미를 갖습니다.락 테이블걱정됩니다, 다릅니다 어떤 모드가 어떤 모드와 충돌하는지에 대한 규칙에서만 가능합니다.

사용법

다음으로 갈 때 기본 키 테이블에 대한 공유 사설 토토을 얻습니다. 외래 키 테이블에 삽입을 수행합니다.

작업 시작;
공유 모드에서 사설 토토 테이블 영화;
영화에서 ID 선택 
    WHERE name = '스타워즈: 에피소드 I - 보이지 않는 위협';
-- 레코드가 반환되지 않은 경우 ROLLBACK을 수행합니다.
film_user_comments 값에 삽입하세요. 
    (_id_, '좋아요! 너무 오랫동안 기다리고 있었어요!');
작업 커밋;

다음의 경우 기본 키 테이블에서 SHARE ROW EXCLUSIVE 사설 토토을 수행합니다. 삭제 작업을 수행하려고 합니다.

작업 시작;
공유 행 독점 모드의 사설 토토 테이블 영화;
ID가 있는 곳의film_user_comments에서 삭제
    (등급 < 5인 영화에서 ID 선택);
등급이 < 5인 영화에서 삭제하세요.
작업 커밋;

호환성

SQL92

없습니다락 테이블SQL92, 대신에거래 설정동시성을 지정하려면 거래 수준. 우리도 그것을 지지합니다. 참조거래 설정용 세부사항.

액세스 공유, 액세스 독점 및 공유 업데이트 제외 독점 사설 토토 모드,PostgreSQL사설 토토 모드 및락 테이블구문은 다음과 호환됩니다. 에 존재함오라클(TM).