IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類(lèi)|軟件專(zhuān)題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)Oracle → 教你在Oracle中使用鎖進(jìn)行并發(fā)控制

教你在Oracle中使用鎖進(jìn)行并發(fā)控制

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  現(xiàn)在主流的數(shù)據(jù)庫(kù)管理系統(tǒng)中,都支持多個(gè)事務(wù)同時(shí)執(zhí)行,這樣提高了數(shù)據(jù)庫(kù)管理系統(tǒng)的運(yùn)行效率。試想如果只允許一個(gè)事務(wù)運(yùn)行,而這個(gè)事務(wù)又需要很長(zhǎng)的時(shí)間,那么其他的用戶必須一直等待該事務(wù)結(jié)束,效率何其低下。執(zhí)行不同的事務(wù)雖然可以提高性能,但是有可能會(huì)破壞數(shù)據(jù)的完整性,所以我們必須在性能和數(shù)據(jù)完整性之間進(jìn)行權(quán)衡。那么什么是并發(fā)控制呢?并發(fā)控制是數(shù)據(jù)庫(kù)管理系統(tǒng)協(xié)調(diào)多個(gè)運(yùn)行事務(wù)的行為。首先了解一下,并發(fā)控制中經(jīng)常遇到的三個(gè)問(wèn)題。

  臟讀

  我們通過(guò)一個(gè)products表來(lái)解釋一下什么是臟讀,該products表有一列quantity(數(shù)量),現(xiàn)在的值為20。假如現(xiàn)在有兩個(gè)事務(wù)T1和T2,它們都是要更新quantity列,T1將該列值加100,T2將此列減10,但是T1執(zhí)行失敗進(jìn)行了回滾。我們很容易計(jì)算出正確的結(jié)果20-10=10,但是如果事務(wù)按照以下方式運(yùn)行,能夠得出什么結(jié)果?

  時(shí)間   事務(wù)   步驟                 存儲(chǔ)值

  1      T1     讀出quantity的值         20

  2      T1      quantity=20+100        120

  3      T1      寫(xiě)入quantity值         120

  4      T2      讀出quantity(T1未提交)     120

  5      T2      quantity=120-10        110

  6      T1      回滾(rollback)          20

  7      T2      寫(xiě)入quantity值         110

  以上得出了110的結(jié)果,顯然是不正確的,問(wèn)題就在于T2讀取到了T1沒(méi)有提交的數(shù)據(jù),我們把這種情況就稱(chēng)之為臟讀。

  不可重復(fù)讀

  還是事務(wù)T1和T2,它們都是要更新quantity列,T1將該列值加100,T2將此列減10,而且兩個(gè)事務(wù)都成功。我們很容易計(jì)算出正確的結(jié)果20+100-10=110,但是如果事務(wù)按照以下方式運(yùn)行,能夠得出什么結(jié)果?

  時(shí)間   事務(wù)   步驟                存儲(chǔ)值

  1      T1     讀出quantity的值         20

  2      T2     讀出quantity的值          20

  3      T1     quantity=20+100         120

  4      T2     quantity=20-10          10

  5      T1     寫(xiě)入quantity值(更新丟失)      110

  6      T2     寫(xiě)入quantity值           10

  得出了10的結(jié)果,仍然是不正確的。問(wèn)題就在于T2的值覆蓋了T1的值,我們把這種情況稱(chēng)之為不可重復(fù)讀。

  幻覺(jué)讀

  例如T1對(duì)一個(gè)表中的所有行修改,同時(shí)T2向該表中插入一行記錄。這時(shí)在T1中就會(huì)發(fā)生還有沒(méi)有被修改的數(shù)據(jù)行,就好象發(fā)生了幻覺(jué)一樣。

  SQL92標(biāo)準(zhǔn)定義了四種隔離級(jí)別,以解決以上問(wèn)題,四種隔離級(jí)別如下圖所示:

  

關(guān)鍵詞標(biāo)簽:Oracle

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修改SQL語(yǔ)句案例 oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修改SQL語(yǔ)句案例 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修改SQL語(yǔ)句案例 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句 ORACLE和SQL語(yǔ)法區(qū)別歸納(1) oracle grant 授權(quán)語(yǔ)句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法