neverend的日志

          不記錄,終將被遺忘。 一萬年太久,只爭朝夕。 他們用數(shù)字構建了整個世界。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            62 Posts :: 1 Stories :: 17 Comments :: 0 Trackbacks

          數(shù)據庫中的事務是可以并發(fā)執(zhí)行的,由此帶來四種并發(fā)問題:

          一、丟失更新 update lost

          1.回滾丟失 事務A修改X, 事務B修改X, 事務B回滾,事務A提交。結果:事務A的修改丟失了

          2.覆蓋丟失 并發(fā)的事務A和A'執(zhí)行同樣的任務, A讀取X, B讀取X, A將X+1寫回,A'將X+1寫回。結果:X應為X+2,實際卻為X+1

          二、臟讀取 dirty read

          事務A修改數(shù)據X(此時A沒有commit),事務B讀取X,事務A回滾。 結果 : 事務B讀取的X不準確

          三、不可重復讀 Non-Repeatable Read

          事務A讀取數(shù)據X ,事務B修改數(shù)據X ,然后事務A再讀該數(shù)據,結果:事務A兩次讀取的數(shù)據不一致。

          四、幻想讀 Phantom Read 讀取的數(shù)據集未改變,但是條件數(shù)據集改變,造成事務A兩次讀取的數(shù)據不一致。

          解決方案:

          Sql標準隔離級別

          Dirty Read

          NonRepeatable Read

          Phantom Read

          Read uncommitted

          Possible

          Possible

          Possible

          Read committed

          Not possible

          Possible

          Possible

          Repeatable read

          Not possible

          Not possible

          Possible

          Serializable

          Not possible

          Not possible

          Not possible

          Serializable 全序列化 提供嚴格的事務隔離。它要求事務序列化執(zhí)行,事務只能一個接著一個地執(zhí)行,但不能并發(fā)執(zhí)行。如果僅僅通過“行級鎖”是無法實現(xiàn)事務序列化的,必須通過其他機制保證新插入的數(shù)據不會被剛執(zhí)行查詢操作的事務訪問到。

              Repeatable Read 可重復讀取 禁止不可重復讀取和臟讀取,但是有時可能出現(xiàn)幻影數(shù)據。這可以通過“共享讀鎖”和“排他寫鎖”實現(xiàn)。讀取數(shù)據的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。

              Read Committed 授權讀取 允許不可重復讀取,但不允許臟讀取。這可以通過“瞬間共享讀鎖”和“排他寫鎖”實現(xiàn)。讀取數(shù)據的事務允許其他事務繼續(xù)訪問該行數(shù)據,但是未提交的寫事務將會禁止其他事務訪問該行。

              Read Uncommitted 未授權讀取 允許臟讀取,但不允許更新丟失。如果一個事務已經開始寫數(shù)據,則另外一個數(shù)據則不允許同時進行寫操作,但允許其他事務讀此行數(shù)據。該隔離級別可以通過“排他寫鎖”實現(xiàn)。

          隔離級別的實現(xiàn)原理:

          ………………

          其他相關知識

          事務定義:是指作為單個邏輯工作單元執(zhí)行的一系列操作。要么全部執(zhí)行,要么全部不執(zhí)行。

          事務四種屬性: ACID 原子性、一致性、隔離性和持久性

          A : 要么全都執(zhí)行,要么全都不執(zhí)行

          C: 所有的數(shù)據都保持一致狀態(tài) 賬戶A轉出100$給賬戶B , 保證賬戶A -100$,賬戶B +100$

          I: 由并發(fā)事務所作的修改必須與任何其它并發(fā)事務所作的修改隔離。數(shù)據查看可串行。

          D:事務完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)致命的系統(tǒng)故障也將一直保持。

          參考資料:

          http://blog.csdn.net/yongyuana01/archive/2009/02/25/3936482.aspx

          http://epub.itpub.net/3/4.htm

          http://baike.baidu.com/view/1298364.html?fromTaglist

          閱讀全文
          類別:技術天地 查看評論
          posted on 2010-09-29 10:55 neverend 閱讀(226) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          主站蜘蛛池模板: 昌黎县| 新龙县| 酒泉市| 新巴尔虎左旗| 绵竹市| 两当县| 张家港市| 万年县| 察隅县| 海盐县| 昌邑市| 佛学| 陆河县| 巨鹿县| 会同县| 若羌县| 浑源县| 寻甸| 西宁市| 阿勒泰市| 潞城市| 中江县| 筠连县| 淮南市| 临洮县| 苏州市| 环江| 枣庄市| 伊宁县| 莆田市| 弥勒县| 高阳县| 德清县| 秭归县| 阳曲县| 武乡县| 平谷区| 诸暨市| 达拉特旗| 平陆县| 无极县|