SQL Server死鎖測試
SQL Server死鎖問題很值得我們?nèi)パ芯?,下面就作了一個相關(guān)方面的測試,看看究竟什么時候會出現(xiàn)SQL Server死鎖問題。
SQL Server死鎖測試
--增設(shè) 帳戶表_2
CREATE TABLE 帳戶表_2
(
帳號 CHAR(4),
余額 INT
)
GO
INSERT 帳戶表_2
SELECT 'C',100
UNION ALL
SELECT 'D',200
--在第一個連接中執(zhí)行以下語句
BEGIN TRAN
UPDATE 帳戶表 SET 余額=3 WHERE 帳號='A'
WAITFOR DELAY '00:00:10'
UPDATE 帳戶表_2 SET 余額=3 WHERE 帳號='C'
COMMIT TRAN
--在第二個連接中執(zhí)行以下語句
BEGIN TRAN
UPDATE 帳戶表_2 SET 余額=4 WHERE 帳號='C'
WAITFOR DELAY '00:00:10'
UPDATE 帳戶表 SET 余額=4 WHERE 帳號='A'
COMMIT TRAN
--刪除測試表
DROP TABLE 帳戶表,帳戶表_2
--同時執(zhí)行,系統(tǒng)會檢測出死鎖,第一個連接的事務(wù)可能正常執(zhí)行,SQL Server 終止第二個連接的事務(wù)(不涉及超時)。
--如果沒有出現(xiàn)死鎖,則在其它事務(wù)釋放鎖之前,請求鎖的事務(wù)被阻塞。
--LOCK_TIMEOUT 設(shè)置允許應(yīng)用程序設(shè)置語句等待阻塞資源的最長時間。
4、更新數(shù)據(jù)時候允許進(jìn)行插入
5、插入數(shù)據(jù)時不允許更新\讀取
【編輯推薦】