<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    列宿乃施于上榮兮 日月才經于柍桭

    ………… 白駒過隙 歲月如斯 夢縈回繞 心靈之聲
    posts - 57, comments - 8, trackbacks - 0, articles - 41
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    關系型數據庫的事務隔離級別

    Posted on 2008-07-10 09:42 默認為零 閱讀(1060) 評論(0)  編輯  收藏 所屬分類: 技術

    概要

      數據庫隔離級別是關系型數據庫保障事務生命周期過程中幾個層次的數據安全策略。
      隔離級別越高,越能保證數據的完整性和一致性,但是對并發性能的影響也越大;而隔離級別越低,事務并發性越強,但同時會出現與業務情況相背的數據情況。如果系統壓力偏大而業務數據能支持較強的容錯情況,我們可以選擇相對較低的事務隔離級別,在個別應用場景可以由應用程序采用悲觀鎖或樂觀鎖來控制低級別事務隔離級別引出的數據安全情況;而數據一致性需求較強的應用場景,如果系統壓力并不大且在一個可控的壓力范圍之內,我們可以選擇較高的事務隔離級別支持,甚至可以選擇最高的串行執行的隔離級別Serializable。


    事務完整性

      事務完整性可以用ACID特性來衡量事務的質量,違反事務完整性的問題有3類:臟讀、不可重復讀和幻像讀。

      ACID:原子性(atomicity),一致性(consistency),隔離性(isolation),持續性(durability)
      原子性:事務是原子的,要不全部完成,要不全部失敗。
      一致性:保證數據庫的一致性,事務執行之前是一致的,執行之后也是一致的。
      隔離性:每個事務必須和其他事務產生的結果隔離開來。
      持續性:事務的持續性指不管系統發生了什么故障,事務處理的結果都是永久的,數據庫產品必須保證,即使存放數據的驅動器融化了,也能將數據庫恢復到驅動器融化之前,即最后一個事務提交的瞬間狀態。

      事務缺陷:臟讀、不可重復讀、幻像讀
      1)臟讀
      讀取了其它事務未提交的數據。
      2)不可重復讀
      對于單行數據來說。事務A兩次讀取的數據不一致,因為看到的是事務B提交前后的數據,自然不一致。
      3)幻像讀
      對于多行數據來說。事務A兩次讀取的行數不一致,因為在其過程中正巧事務B修改并提交了滿足事務A查詢條件的記錄。
      

    幾種隔離級別

      以JDBC中Connection的事務隔離級別定義來說明:
      1)Read Uncommitted(TRANSACTION_READ_UNCOMMITTED)
      事務A可以讀取到事務B未提交的數據,如果事務B發生異?;貪L,事務A讀取到的將是臟數據。此事務隔離級別的應用場景中將出現臟讀、不可重復讀和幻像讀這幾種情況。

      2)Read Committed(TRANSACTION_READ_COMMITTED)
      事務A可以讀取到事務B已經提交的數據,不可讀取到事務B未提交的數據,避免了臟讀,但沒有避免不可重復讀和幻像讀。

      3)Repeatable Read(TRANSACTION_REPEATABLE_READ)
      可以回避臟讀、不可重復讀的情況,但無法避免幻像讀。

      4)Serializable(TRANSACTION_SERIALIZABLE)
      防止所有的事務缺陷,適用于絕對的事務完整性的要求比性能更為重要的情況,銀行帳務系統、高度競爭性的銷售數據庫,等等,可以選擇使用Serializable。


    事務隔離級別查看及修改

      1)DB2
      默認:Read Committed
      查看:
      修改:a.DB2SET DB2_SQLROUTINE_PREPOPTS=RR|RS|CS|UR 
                        b.db2 change isolation to UR
                        c.SELECT * FROM tablename WITH UR
            (RR-Serializable、RS-Repeatable Read、CS-Read Committed、UR-Read Uncommitted)

      2)Oracle
      默認:Read Committed
      查看:
      修改:set transaction isolation level serializable(Oracle只有read committed 和 serializable)

      3)Sybase
      默認:Read Committed
      查看:select @@isolation
      修改:set transaction isolation level 0
      (level 3-Serializable、level 2-Repeatable Read、level 1-Read Committed、level 0-Read Uncommitted)

      4)Sql Server
      默認:Read Committed
      查看:
      修改:set transaction isolation level read uncommitted
     
      5)Mysql
      默認:Repeatable Read
      查看:select @@tx_isolation;
      修改:set transaction isolation level read uncommitted;

    主站蜘蛛池模板: 相泽亚洲一区中文字幕| 69堂人成无码免费视频果冻传媒 | 亚洲国产精久久久久久久| 男女污污污超污视频免费在线看| 国产美女a做受大片免费| 亚洲国产欧美国产综合一区 | AA免费观看的1000部电影| 亚洲精品中文字幕乱码影院| 亚洲一区二区免费视频| 亚洲免费在线视频观看| 成年人网站在线免费观看| 亚洲国产成人久久综合| 国产福利免费在线观看| 日韩毛片免费一二三| 亚洲人成网77777色在线播放| 一个人免费视频观看在线www| 亚洲电影国产一区| 国产精品色拉拉免费看| 在线aⅴ亚洲中文字幕| 国产小视频在线观看免费| 免费又黄又爽又猛大片午夜| 亚洲色偷拍另类无码专区| 久久伊人免费视频| 67194在线午夜亚洲| 国产福利免费观看| 成在人线av无码免费高潮喷水| 久久久久亚洲精品美女| 在线观看特色大片免费视频 | 国产免费啪嗒啪嗒视频看看| 一级特黄录像视频免费| 亚洲日本一区二区| 夭天干天天做天天免费看| 四虎影视永久在线精品免费 | 亚洲最大天堂无码精品区| 午夜亚洲av永久无码精品| 国产猛男猛女超爽免费视频| 亚洲无吗在线视频| 亚洲视频在线一区二区| 亚洲一级毛片免费看| 男男黄GAY片免费网站WWW| 亚洲精选在线观看|