国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

曲苑雜壇--DML操作中如何處理那些未提交的數(shù)據(jù)

2024-07-21 02:47:49
字體:
供稿:網(wǎng)友
曲苑雜壇--DML操作中如何處理那些未提交的數(shù)據(jù)

對數(shù)據(jù)庫稍有了解的人,數(shù)據(jù)庫使用排他鎖X鎖來避免兩個事務(wù)同時修改同一條數(shù)據(jù),同時使用較低級別如行上加鎖來提高并發(fā)度。

以下了兩種場景很容易理解:

1>事務(wù)1執(zhí)行 UPDATE TB1 SET C2=1 WHERE C1=1(此處假設(shè)C1為主鍵,使用行鎖),事務(wù)1未提交,而后事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=1,事務(wù)2必須等到事務(wù)1提交或回滾后,才能獲得對該行數(shù)據(jù)的X鎖;

2>事務(wù)1執(zhí)行 UPDATE TB1 SET C2=1 WHERE C1=1(此處假設(shè)C1為主鍵,使用行鎖),事務(wù)1未提交,而后事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=2,由于事務(wù)1和2修改的數(shù)據(jù)行不同,因此事務(wù)1和事務(wù)2不會阻塞;

但對于以下兩種場景就有些難理解:

1>事務(wù)1執(zhí)行 UPDATE TB1 SET C1=11 WHERE C1=1(此處假設(shè)C1為主鍵,使用行鎖),事務(wù)1未提交,而后事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=11,數(shù)據(jù)行在事務(wù)1更新前不滿足事務(wù)2的更新條件,但數(shù)據(jù)行在事務(wù)1更新后又滿足事務(wù)2的更新條件,事務(wù)2會被事務(wù)1阻塞么?

測試結(jié)果:會被阻塞

測試代碼:

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事務(wù)1開始執(zhí)行,修改數(shù)據(jù)行但未提交;BEGIN TRANUPDATE dbo.TB1SET C1=11WHERE C1=1在新會話中事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=11
View Code

2>事務(wù)1執(zhí)行 UPDATE TB1 SET C1=11 WHERE C1=1(此處假設(shè)C1為主鍵,使用行鎖),事務(wù)1未提交,而后事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=1,數(shù)據(jù)行在事務(wù)1更新前滿足事務(wù)2的更新條件,但數(shù)據(jù)行在事務(wù)1更新后又不滿足事務(wù)2的更新條件,事務(wù)2會被事務(wù)1阻塞么?

測試結(jié)果:會被阻塞

測試代碼:

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事務(wù)1開始執(zhí)行,修改數(shù)據(jù)行但未提交;BEGIN TRANUPDATE dbo.TB1SET C1=11WHERE C1=1在新會話中事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=1
View Code

3>事務(wù)1執(zhí)行 INSERT INTO dbo.TB1( C1, C2 )SELECT 5,5(此處假設(shè)C1為主鍵,使用行鎖),事務(wù)1未提交,而后事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=5,數(shù)據(jù)行在事務(wù)1更新前滿足事務(wù)2的更新條件,但數(shù)據(jù)行在事務(wù)1更新后又不滿足事務(wù)2的更新條件,事務(wù)2會被事務(wù)1阻塞么?

測試結(jié)果:會被阻塞

測試代碼:

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事務(wù)1開始執(zhí)行,修改數(shù)據(jù)行但未提交;BEGIN TRANINSERT INTO dbo.TB1( C1, C2 )SELECT 5,5在新會話中事務(wù)2執(zhí)行UPDATE TB1 SET C2=2 WHERE C1=5
View Code

測試結(jié)論:

對于未提交事務(wù)A修改的數(shù)據(jù),無論該數(shù)據(jù)在更新修改的值前還是修改后的值滿足事務(wù)B的修改條件,那么都會對事務(wù)B造成阻塞。

--==========================================================

年關(guān)近了,日子不好過,隨時擔(dān)心被母親大人電話轟炸,壓力山大,so,小伙伴們就將就著看著沒啥營養(yǎng)的博客吧!

--==========================================================

依舊是妹子


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新竹县| 柞水县| 梅州市| 广东省| 竹溪县| 绍兴县| 额尔古纳市| 深水埗区| 裕民县| 阆中市| 肥乡县| 常德市| 长乐市| 孟村| 临夏县| 哈密市| 阜新| 甘孜| 贺州市| 公主岭市| 大兴区| 司法| 富顺县| 林甸县| 中江县| 浑源县| 南安市| 田东县| 林周县| 磴口县| 抚远县| 天长市| 宜章县| 鄄城县| 陇南市| 鱼台县| 淳安县| 扎赉特旗| 纳雍县| 迁西县| 云梦县|