잠금 호환성(데이터베이스 엔진)
잠금 호환성에 따라 여러 트랜잭션이 동시에 같은 리소스에 대한 잠금을 획득할 수 있는지 여부가 결정됩니다. 이미 다른 트랜잭션에서 리소스를 잠근 경우에는 요청된 잠금 모드가 기존 잠금 모드와 호환되어야만 새 잠금 요청이 허용될 수 있습니다. 요청된 잠금의 모드가 기존 잠금과 호환되지 않을 경우 새 잠금을 요청하는 트랜잭션은 기존 잠금이 해제되거나 잠금 시간 초과 간격이 만료될 때까지 기다립니다. 예를 들어 배타적 잠금과 호환되는 잠금 모드는 없습니다. 배타적(X) 잠금이 설정되어 있는 동안 다른 트랜잭션은 배타적(X) 잠금이 해제될 때까지 해당 리소스에 대해 공유, 업데이트 또는 배타적 잠금을 비롯한 어떠한 유형의 잠금도 획득할 수 없습니다. 리소스에 공유(S) 잠금이 적용된 경우에는 첫 번째 트랜잭션이 완료되지 않아도 다른 트랜잭션이 해당 항목에 대해 공유 잠금 또는 업데이트(U) 잠금을 획득할 수 있습니다. 그러나 공유 잠금이 해제될 때까지는 다른 트랜잭션이 배타적 잠금을 획득할 수 없습니다.
다음 표에서는 가장 일반적인 잠금 모드의 호환성을 보여 줍니다.
|
기존 허용 모드 |
|
|
|
|
|
---|---|---|---|---|---|---|
요청 모드 |
IS |
S |
U |
IX |
SIX |
X |
내재된 공유(IS) |
예 |
예 |
예 |
예 |
예 |
아니요 |
공유(S) |
예 |
예 |
예 |
아니요 |
아니요 |
아니요 |
업데이트(U) |
예 |
예 |
아니요 |
아니요 |
아니요 |
아니요 |
의도 배타(IX) |
예 |
아니요 |
아니요 |
예 |
아니요 |
아니요 |
의도 배타 공유(SIX) |
예 |
아니요 |
아니요 |
아니요 |
아니요 |
아니요 |
배타(X) |
아니요 |
아니요 |
아니요 |
아니요 |
아니요 |
아니요 |
[!참고]
의도 배타(IX) 잠금은 모든 행이 아닌 일부 행만 업데이트하기 위한 것이므로 IX 잠금 모드와 호환됩니다. 일부 행을 읽거나 업데이트하려고 하는 다른 트랜잭션도 허용됩니다. 단, 해당 행을 다른 트랜잭션이 업데이트하고 있지 않아야 합니다.
전체 잠금 호환성 매트릭스
MicrosoftSQL Server에서 사용할 수 있는 모든 잠금 모드의 호환성을 확인하려면 다음 표를 사용합니다.