我正在为MCTS 70-433做准备,在阅读垃圾堆时我发现了这个问题。Set Transaction Isolation level serializable blocks blocks others transactions?
“你的任务是分析以下查询的阻止行为
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阻止e用户。该查询不会被其他查询阻止。 C.其他查询不会被用户阻止。该查询将被其他查询阻止。
D.其他查询不会被用户阻止。此查询将不会被其他查询被阻止。”
正确的答案给出D.
但是当使用串行事务级别,它会发出一个锁,防止其他事务仪式。??
请纠正我,如果我错了。
哦,惊讶的是SQL服务器允许不使用的CTE。 – zerkms
@MarkBrackett如果使用CTE并且其他一些事务使用Customer表会怎么样?那么结果会是什么? – Shrikey
@Shrikey - 它很大程度上取决于涉及的查询。如果使用CTE,正确的答案是“信息不足”。除此之外,我不得不猜测“B”,因为只有一方可以被实际阻塞(否则,这是一个死锁)。尽管如此,这是一个很大的简化,因为涉及到多个锁。 –