나는 MCTS 70 - 433를 준비하고있는 동안 덤프를 읽는 동안이 질문을 발견했다.트랜잭션 격리 수준 serializable 블록은 다른 트랜잭션을 설정 하시겠습니까?
는 "당신은 다음과 같은 쿼리 차단 동작을 분석하는 임무된다
당신은 고객 테이블을 사용하는 다른 쿼리이 쿼리에 의해 차단 될 수 있는지를 확인해야합니다SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
WITH customers
AS (SELECT *
FROM customer),
salestotal
AS (SELECT customerid,
sum(ordertotal) AS Allordertotal
FROM salesorder)
SELECT customerid,
allordertotal
FROM salestotal
WHERE allordertotal > 10000.00
. 또한이 있는지 확인해야합니다 쿼리는 고객 테이블을 사용하는 다른 쿼리에 의해 차단됩니다. 다른 쿼리는 사용자가 차단됩니다
A.을.이 쿼리는 다른 쿼리에 의해 차단됩니다.
B. 다른 쿼리가됩니다 th에 의해 막히다. 전자 사용자. 이 쿼리는 다른 쿼리에 의해 차단되지 않습니다.
C. 다른 쿼리는 사용자가 차단하지 않습니다. 이 쿼리는 다른 쿼리에 의해 차단됩니다.
D. 다른 쿼리는 사용자에 의해 차단되지 않습니다. 이 쿼리는 ". 다른 쿼리에 의해 차단되지 않습니다
정답은 D.로 제공됩니다
그러나 직렬화 가능 트랜잭션 수준을 사용하는 경우, 그것은 잠금을 발행하고 다른 트랜잭션 의식을 중지합니다. ??
을내가 잘못하면 나를 바로 잡으십시오
아, 놀랍지 만 SQL Server는 사용되지 않는 CTE를 허용합니다. – zerkms
@MarkBrackett CTE가 사용되고 다른 트랜잭션이 고객 테이블을 사용하면 어떨까요? 그러면 결과는 무엇입니까? – Shrikey
@Shrikey - 그것은 관련된 쿼리에 크게 달려 있습니다. CTE가 사용 된 경우 정답은 "충분하지 않은 정보"입니다. 그걸 막으려면, 한 쪽만 현실적으로 차단 될 수 있기 때문에 "B"를 추측해야합니다 (그렇지 않으면 교착 상태입니다). 그것은 비록 여러 개의 잠금이 포함되어 있기 때문에 총체적인 단순화입니다. –