資料庫死鎖 之 一.啥是死鎖
阿新 • • 發佈:2020-09-01
資料庫死鎖之 啥是死鎖
1.理解死鎖
-- 1.1 學習資料 https://www.cnblogs.com/firstdream/p/4624473.html
資源的死鎖是因為資源的多方,自己需要使用的資源被其他人佔用上鎖;導致互相等待;從而發生死鎖; 先理解下鎖概念,資料庫存在 X 鎖 & S 鎖;鎖型別 | 特性 | 說明 | 場景 |
X | 排他獨佔 | 1.一旦上鎖無法上其他鎖 | 1.update 場景會上鎖 2.delete 場景會上鎖 |
S | 共享 | 1.可與其他的共享鎖功能存在 2.當存在X鎖,無法上S鎖,因為X排他 | 1.select 場景 |
-- 1.2 死鎖場景
-- 1.2.1 死鎖場景一,多表交叉死鎖
A.先建立表TestA,TestBCREATE TABLE TestA ( Name NVARCHAR(100) ) CREATE TABLE TestB ( Name NVARCHAR(100) )
B.觸發死鎖,讓我們玩壞這個
CREATE PROC p_TestA as BEGIN TRANSACTION ; INSERT INTO TestA(Name) VALUES('張三') ; SELECT name FROM TestB; COMMIT; CREATE PROC p_TestBC.寫兩個現程迴圈呼叫這兩個儲存過程as BEGIN TRANSACTION ; INSERT INTO TestB(Name) VALUES('張三') ; SELECT name FROM TestA; COMMIT;
using (SqlConnection conn = new SqlConnection("XXX")) { SqlCommand commmand = new SqlCommand(); commmand.Connection = conn; commmand.CommandText = "exec p_TestA;"; conn.Open(); commmand.ExecuteNonQuery(); conn.Close(); commmand.Dispose(); conn.Dispose(); }:) #看到沒,終於玩壞了