Oracle——事務(Transaction)

 

事務:數據庫

  事務是指做爲單個邏輯工做單元執行的一組相關操做。  安全

  這些操做要求所有完成或者所有不完成。性能

使用事務的緣由:保證數據的安全有效。spa

事務的四個特色:(ACID)設計

  一、原子性(Atomic):事務中全部數據的修改,要麼所有執行,要麼所有不執行。事務

  二、一致性(Consistence):事務完成時,要使全部全部的數據都保持一致的狀態,換言之:經過事務進行的全部數據修改,必須在全部相關的表中獲得反映。it

  三、隔離性(Isolation):事務應該在另外一個事務對數據的修改前或者修改後進行訪問。io

  四、持久性(Durability):保證事務對數據庫的修改是持久有效的,即便發生系統故障,也不該該丟失。table

事務組成:select

  一條或者多條DML,[一條DDL]和一條DCL。

事務的分類:

  一、顯式事務:

    (1)要去顯式的調用DCL。

    (2)只有用到COMMIT之後纔會真正寫入數據庫,也持久化了。

  二、隱式事務:

    (1)若是人工要使用隱式事務,SET AUTOCOMMIT ON (只針對一個鏈接)

    (2)如下狀況爲自動提交:

       1)正常執行完成的DDL語句:create、alter、drop

       2)正常執行完場的DCL語句GRANT、REVOKE

       3)正常退出的SQLPlus或者SQL Developer等客戶端

回滾:

  RollBack只能對未提交的數據撤銷,已經Commit的數據是沒法撤銷的,由於commit以後已經持久化到數據庫中。

  

髒讀(Dirty Read):事務T1更新了一行數據,尚未提交所作的修改,T2讀取更新後的數據,T1回滾,T2讀取的數據無效,這種數據稱爲髒讀數據。

不可重複讀(UNrepeatable Read):事務T1讀取一行數據,T2修改了T1剛剛讀取的記錄,T1再次查詢,發現與第一次讀取的記錄不相同,稱爲不可重複讀。

幻讀(Phantom Read):事務T1讀取一條帶WHERE條件的語句,返回結果集,T2插入一條新紀錄,剛好也是T1的WHERE條件,T1再次查詢,結果集中又看到T2的記錄,新紀錄就叫作幻讀。

隔離級別:

  NO_TRANSACTION     不支持事務

  READ_UNCOMMITED    容許髒讀、不可重複讀、幻讀

  READ_COMMITED      容許不可重複讀、幻讀,不容許髒讀

  REPEATABLE       容許幻讀,不容許髒讀、不可重複讀

  SERIALIZABLE       髒讀、不可重複讀、幻讀都不容許

Oracle支持SQL92標準的READ_COMMITED、SERIALIZABLE,自身特有的READ_ONLY

 

鎖:

排它鎖:(X鎖,eXclusive LockS)

  當有DML語句執行的時候,設計的行都會加上排它鎖,其餘事物不能進行讀取修改。

共享鎖:(S鎖,Shared Locks)

  加了共享鎖的數據,能夠被其餘事物讀取,但不能修改。如select語句。

爲了保證性能:樂觀鎖,悲觀鎖

  悲觀鎖:每次都是假設數據確定會衝突,數據開始讀取時就把數據給鎖住。

  樂觀鎖:每次都是假設通常狀況下不會發生數據衝突,只有數據更新提交的時候,纔會對數據的衝突與否進行檢測,若是發生衝突,返回錯誤信息讓用戶處理。

相關文章
相關標籤/搜索