문제

다음 SQL을 고려하십시오.

BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

INSERT Bands
    (  Name  )
SELECT 'Depeche Mode'
UNION
SELECT 'Arcade Fire'

    -- I've indented the inner transaction to make it clearer.

    BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    SELECT *
      FROM Bands

    COMMIT

-- What is the isolation level right here?

UPDATE Bands
   SET Name = 'Modest Mouse'
 WHERE Name = 'Oddest House'

COMMIT

요약하면, 우리는 거래를 시작하고 격리 수준을 READ COMMITTED. 그런 다음 임의의 SQL을 수행하고 중첩 된 트랜잭션을 시작합니다. 이 거래에서 우리는 격리 수준을 변경합니다 READ UNCOMMITTED. 그런 다음 그 거래를 저지르고 다른 거래로 돌아갑니다.

이제 내 추측은 내부 커밋 후 격리 수준이 READ COMMITTED. 이 올바른지?

도움이 되었습니까?

해결책

나는 그것이 옳다고 생각하지 않습니다.

여기를 참조하십시오. 트랜잭션을 설정하십시오

한 번에 격리 레벨 옵션 중 하나만 설정할 수 있으며 명시 적으로 변경 될 때까지 해당 연결을 위해 설정되어 있습니다.

다른 팁

당신은 [Bob Probst]가 정확합니다. 흥미롭게도 선적 서류 비치 링크 :

저장된 프로 시저 또는 트리거에서 설정 세트 트랜잭션 격리 레벨을 발행하는 경우, 객체가 반환되면 객체가 호출 될 때 분리 레벨이 유효한 레벨로 재설정됩니다. 예를 들어, 배치로 반복 가능한 읽기를 설정하고 배치를 한 번 분리 레벨을 직렬화 가능한 것으로 설정하는 저장 프로 시저를 호출하면 저장된 프로 시저가 배치로 제어를 반환 할 때 격리 레벨 설정이 반복 가능한 읽기로 되돌아갑니다.

그래서 여기서 결론은 세트 트랜잭션 격리 수준이 절차 친화력, 아니다 거래 친화력 (내가 생각했듯이).

대박!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top