對數據庫稍有了解的人,數據庫使用排他鎖X鎖來避免兩個事務同時修改同一條數據,同時使用較低級別如行上加鎖來提高并發度。
以下了兩種場景很容易理解:
1>事務1執行 UPDATE TB1 SET C2=1 WHERE C1=1(此處假設C1為主鍵,使用行鎖),事務1未提交,而后事務2執行UPDATE TB1 SET C2=2 WHERE C1=1,事務2必須等到事務1提交或回滾后,才能獲得對該行數據的X鎖;
2>事務1執行 UPDATE TB1 SET C2=1 WHERE C1=1(此處假設C1為主鍵,使用行鎖),事務1未提交,而后事務2執行UPDATE TB1 SET C2=2 WHERE C1=2,由于事務1和2修改的數據行不同,因此事務1和事務2不會阻塞;
但對于以下兩種場景就有些難理解:
1>事務1執行 UPDATE TB1 SET C1=11 WHERE C1=1(此處假設C1為主鍵,使用行鎖),事務1未提交,而后事務2執行UPDATE TB1 SET C2=2 WHERE C1=11,數據行在事務1更新前不滿足事務2的更新條件,但數據行在事務1更新后又滿足事務2的更新條件,事務2會被事務1阻塞么?
測試結果:會被阻塞
測試代碼:
DROP TABLE dbo.TB1GOCREATE TABLE TB1( C1 INT, C2 INT)GOCREATE UNIQUE CLUSTERED INDEX IDX_C1ON dbo.TB1( C1)GOINSERT INTO dbo.TB1( C1, C2 )SELECT 1,1UNIONSELECT 2,2UNIONSELECT 3,3UNIONSELECT 4,4GO事務1開始執行,修改數據行但未提交;BEGIN TRANUPDATE dbo.TB1SET C1=11WHERE C1=1在新會話中事務2執行UPDATE TB1 SET C2=2 WHERE C1=11View Code
2>事務1執行 UPDATE TB1 SET C1=11 WHERE C1=1(此處假設C1為主鍵,使用行鎖),事務1未提交,而后事務2執行UPDATE TB1 SET C2=2 WHERE C1=1,數據行在事務1更新前滿足事務2的更新條件,但數據行在事務1更新后又不滿足事務2的更新條件,事務2會被事務1阻塞么?
測試結果:會被阻塞
測試代碼:
DROP TABLE dbo.TB1GOCREATE TABLE TB1( C1 INT, C2 INT)GOCREATE UNIQUE CLUSTERED INDEX IDX_C1ON dbo.TB1( C1)GOINSERT INTO dbo.TB1( C1, C2 )SELECT 1,1UNIONSELECT 2,2UNIONSELECT 3,3UNIONSELECT 4,4GO事務1開始執行,修改數據行但未提交;BEGIN TRANUPDATE dbo.TB1SET C1=11WHERE C1=1在新會話中事務2執行UPDATE TB1 SET C2=2 WHERE C1=1View Code
3>事務1執行 INSERT INTO dbo.TB1( C1, C2 )SELECT 5,5(此處假設C1為主鍵,使用行鎖),事務1未提交,而后事務2執行UPDATE TB1 SET C2=2 WHERE C1=5,數據行在事務1更新前滿足事務2的更新條件,但數據行在事務1更新后又不滿足事務2的更新條件,事務2會被事務1阻塞么?
測試結果:會被阻塞
測試代碼:
DROP TABLE dbo.TB1GOCREATE TABLE TB1( C1 INT, C2 INT)GOCREATE UNIQUE CLUSTERED INDEX IDX_C1ON dbo.TB1( C1)GOINSERT INTO dbo.TB1( C1, C2 )SELECT 1,1UNIONSELECT 2,2UNIONSELECT 3,3UNIONSELECT 4,4GO事務1開始執行,修改數據行但未提交;BEGIN TRANINSERT INTO dbo.TB1( C1, C2 )SELECT 5,5在新會話中事務2執行UPDATE TB1 SET C2=2 WHERE C1=5View Code
測試結論:
對于未提交事務A修改的數據,無論該數據在更新修改的值前還是修改后的值滿足事務B的修改條件,那么都會對事務B造成阻塞。
--==========================================================
年關近了,日子不好過,隨時擔心被母親大人電話轟炸,壓力山大,so,小伙伴們就將就著看著沒啥營養的博客吧!
--==========================================================
依舊是妹子
新聞熱點
疑難解答