1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京北大青鳥

    全國咨詢電話:15195455103

    三分鐘了解北大青鳥
    當前位置:南京北大青鳥 > 學習園地 > 編程技巧

    Oracle事務講解

    來源:北大青鳥張府園校區? ? ? 作者:IT教育 ? ??

    概念:在數據庫中事務是工作的邏輯單元,一個事務是由一個或多個完成一組的相關行為的SQL語句組成,通過事務機制確保這一組SQL語句所作的操作要么完全成功執行,完成整個工作單元操
    概念:在數據庫中事務是工作的邏輯單元,一個事務是由一個或多個完成一組的相關行為的SQL語句組成,通過事務機制確保這一組SQL語句所作的操作要么完全成功執行,完成整個工作單元操作,要么一點也不執行。
    主要特性:確保數據庫的完整性。
    一、事務的ACID特性
      對一組SQL語句操作構成事務,數據庫操作系統必須確保這些操作的原子性,一致性,隔離性,持久性.
    1、 原子性(Atomicity)
        事務的原子性是指事務中包含的所有操作要么全做,要么不做,也就是說所有的活動在數據庫中要么全部反映,要么全部不反映,以保證數據庫的一致性。
    2、 一致性(Consistency)
        事務的一致性是指數據庫在事務操作前和事務處理后,其中數據必須滿足業務的規則約束。
    3、 隔離性(Isolation)
       隔離性是指數據庫允許多個并發的事務同時對其中的數據進行讀寫或修改的能力,隔離性可以防止多個事務的并發執行時,由于它們的操作命令交叉執行而導致數據的不一致性。
    4、 持久性(durability)
        事務的持久性是指在事務處理結束后,它對數據的修改應該是永久的。即便是系統在遇到故障的情況下也不會丟失,這是數據的重要性決定的。
    二、事務的控制語句
    oracle中,用戶不可以顯示使用命令來開始一個事務.oracle任務第一條修改數據庫的語句,或者一些要求事務處理的場合都是事務的隱式開始。但是當用戶想要終止一個事務處理時,必須顯示使用commit和rollback語句結束。
      根據事務ACID屬性,oracle提供了如下的事務控制語句:
       Set transaction 設置事物屬性
       Set constrains  設置事物的約束模式
       約束模式是指:在事務中修改數據時,數據庫中的約束立即應用于數據,還是將約束推遲到當前事務結束后應用。
       Savepoint 在事務中建立一個存儲的點.當事務處理發生異常而回滾事務時,可指定事務回滾到某存儲點.然后從該存儲點重新執行。
       Release  savepoint  刪除存儲點
       Rollback 回滾事務 取消對數據庫所作的任何操作
       Commit 提交事務 對數據庫的操作做持久的保存。
    a) 設置事務的屬性:
    set transaction語句可用來設置事物的各種屬性。該語句必須放在事務處理的第一個語句.
    也就是說,必須在任何insert、update 、delete語句以及其他的事務處理。
      Set transaction的語句可以讓用戶對事務的以下屬性進行設置
     指定事務的隔離層
     規定回滾事務所使用的存儲空間
     命名事務
     備注:在使用set transaction語句設置屬性時,對于規定回滾事務所使用的存儲空間的設置很少使用.對于命名事務也非常簡單,只有在分布式事務處理中才會體現出命名事務的用途.
     注意:set transaction只對當前事務有效,事務終止,事務當前的設置將會失效。
    三、數據異常和隔離級別
    a) 數據異常
    事務的隔離性定義了一個事務與其它事務的隔離程度.為了更好的理解隔離層,首先討論一下并發事務對同一個數據庫進行訪問可能發生的情況.在并發事務中總體來說會發生如下3種情況
     錯讀 |臟讀
     非重復讀取|不可重復讀
     假讀|幻讀
    i. 錯讀|臟讀:當一個事務修改數據時,另一事務讀取了該數據,但是第一事務由于某種原因取消對數據修改,使數據返回了原狀態,這是第二個事務讀取的數據與數據庫中數據不一致.這就叫錯讀。
    ii. 非重復讀取:是指一個事務讀取數據庫中的數據后,另一個事務則更新了數據,當第一個事務再次讀取其中的數據時,就會發現數據已經發生了改變,這就是非重復讀取。非重復讀取所導致的結果就是一個事務前后兩次讀取的數據不相同。 
    iii. 假讀:如果一個事務基于某個條件讀取數據后,另一個事務則更新了同一個表中的數據,這時第一個事務再次讀取數據時,根據搜索的條件返回了不同的行,這就是假讀。
    b) 選擇隔離層
    隔離層 錯讀|臟讀 非重復讀取|不可重復讀 假讀|幻讀
    READ UNCOMMITTED(非提交讀) 是 是 是
    READ COMMITTED(提交讀) 否 是 是
    Repeatable READ(可重復讀) 否 否 是
    Serializable(串行讀) 否  否 否
    Oracle支持上述四種隔離層中的兩種:read committed 和serializable。除此之外oralce中還定義read only 和 read write隔離層。
     Read committed 這是oracle默認的隔離層。
    Serializable:設置事物的隔離層位它時,事務與事務之間完全隔開,事務以串行的方式執行,這并不是說一個事務必須結束才能啟動另外一個事務,而是說這些事務的執行的結果于一次執行的事務的結果一致。
    Read only和 read write 當使用read only時,事務中不能有任何修改數據庫中數據的操作語句,這包括 insert、update、delete、create語句。Read only是serializable的一個子集,區別是read only 只讀,而serialzable可以執行DML操作。Read write它是默認設置,該選項表示在事務中可以有訪問語句、修改語句.但不經常使用.
    c) 建立set transaction的語句
     列舉如下:
      Set transaction read only
      Set transaction read write
      Set transaction isolation level read committed
      Set transaction isolation level serializable
    注意:這些語句是互斥的.即不能夠同時設置兩個或者兩個以上的選項。
    d) 控制事務
    Commit 提交事務
    rollback 回滾事務
    注意:
    1、自動提交在以下情況中執行
    DDL 語句
    DCL 語句
    不使用 COMMIT 或 ROLLBACK 語句提交或回滾,正常結束會話
    2、會話異常結束或系統異常會導致自動回滾 

    分享到:

    相關閱讀:

    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 久久精品亚洲综合专区| 中文字幕国产综合| 婷婷五月综合色视频| 亚洲综合激情另类小说区| 久久综合偷偷噜噜噜色| 色噜噜狠狠狠狠色综合久一| 久久91综合国产91久久精品| 亚洲人成综合网站7777香蕉| 亚洲综合亚洲综合网成人| 日韩亚洲人成在线综合日本| 精品综合久久久久久97超人 | 婷婷六月久久综合丁香可观看| 久久综合五月丁香久久激情| 亚洲AV综合色区无码一区| 婷婷综合缴情亚洲狠狠尤物 | 狠狠色丁香久久婷婷综合五月| 国产成人人综合亚洲欧美丁香花| 亚洲精品综合久久中文字幕| 久久综合久久伊人| 伊人色综合久久天天| 天天影视色香欲综合免费| 久久婷婷综合色丁香五月| 久久综合伊人77777| 久久婷婷色综合一区二区| 一本色道久久88亚洲综合| 狠狠色丁香婷婷综合久久片 | 久久综合亚洲色HEZYO国产| 婷婷久久综合九色综合绿巨人| 久久综合久久久久88| 亚洲综合精品成人| 人妻av综合天堂一区| 天天做天天爱天天爽综合区| 五月丁香六月综合av| 久久久久一级精品亚洲国产成人综合AV区 | 色狠台湾色综合网站| 国精产品自偷自偷综合下载| 日本一道综合久久aⅴ免费| 在线精品国产成人综合| 激情综合丝袜美女一区二区| 国产精品综合专区中文字幕免费播放 | 伊人久久成人成综合网222|