所有关于SQL Server死锁的文档都讨论了操作1锁定资源A然后尝试访问资源B并且操作2锁定资源B并尝试访问资源A的情况.
但是,我常常在一些繁忙的应用程序中看到select和更新之间甚至多个选择之间的死锁.我发现死锁跟踪输出的一些细节非常难以理解但我真的只想了解什么可能导致两个单独操作之间的死锁.当然,如果一个选择具有读锁定,则更新应该在获得独占锁之前等待,反之亦然?
这种情况发生在SQL Server 2005上,而不是我认为这会产生影响.
我有两个事务:T1与SERIALIZABLE隔离级别和T2(我认为 - 默认READ COMMITTED隔离级别,但没关系).
SELECT然后事务T1执行WAITFOR2秒SELECT.
事务T2 UPDATE对T1读取的数据执行.
它导致死锁,为什么事务T2不等待T1的结束?
当T1具有REPEATABLE READ隔离级别时,一切正常,即出现幻像行.我想当我提高隔离级别时SERIALIZABLE,T2将等待T1的结束.
这是我大学练习的一部分.我必须在两个并行事务中显示负面影响,这些事务具有不正确的隔离级别,并且缺少具有正确隔离级别的这些影响
这是代码,不幸的是字段的名称是波兰语.
T1:
USE MR;
SET IMPLICIT_TRANSACTIONS OFF;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- 1. zapytanie
SELECT
www.IdSamochodu, s.Model, s.Marka, s.NrRejestracyjny, o.PESEL, o.Nazwisko, o.Imie, o.NrTelefonu
FROM
WizytyWWarsztacie www
JOIN
Samochody s
ON s.IdSamochodu = www.IdSamochodu
JOIN
Osoby o
ON o.PESEL = s.PESEL
WHERE
www.[Status] = 'gotowy_do_odbioru'
ORDER BY www.IdSamochodu ASC
;
WAITFOR DELAY '00:00:02'; …