2010-01-21 2 views
1

는 SQL 클라이언트가 다음 명령을 발행 :SQL 서버 NOLOCK 키워드

select * into tbl2 
FROM tbl1 (nolock) 
WHERE DateCreated < '2009/01/01' 

그것이 의미합니까 명령이또는을 TBL1 고정되지 않습니다 것을이 다른 커밋되지 않은 트랜잭션에 의해 차단되지 않습니다를 tbl1로 만들었습니까?

는 업데이트 :

[NOLOCK]이 : 더러운 수 있습니다 읽도록 지정합니다. 다른 트랜잭션이 현재 트랜잭션에서 읽은 데이터를 수정하지 못하도록 공유 잠금이 발행되지 않으며 다른 트랜잭션이 설정 한 배타적 잠금은 현재 트랜잭션이 잠긴 데이터를 읽지 못하도록 차단하지 않습니다. REF : MSDN

답변

4

첫 번째를 의미합니다. 당신은 어떤 자물쇠도 꺼내지 않고있다. 그리고 그러므로 두 번째 다. 당신은 다른 열려있는 거래에 의해 막히지 않을 것입니다. table hints에 대한 MSDN 문서를 참조하십시오.

여기 transaction isolation levels에있는 MSDN 문서 링크가 있습니다. NOLOCK을 사용하려는 경우 유용 할 수 있습니다. NOLOCK은 읽기 레벨이 아닌 분리 레벨에서 SQL 문을 put합니다. 다중 명령문 트랜잭션이있는 경우, 트랜잭션의 대부분의 경우 저레벨로 분리 레벨을 설정하고 트랜잭션의 하나 이상의 명령문에서 레벨을 낮추지 않고 필요한 곳에 올릴 수 있습니다.

2

둘 다. 또한 다른 [커밋되지 않은] 트랜잭션 (있는 경우)에서 커밋되지 않은 데이터를 읽습니다.