程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle——事務(Transaction),oracletransaction

Oracle——事務(Transaction),oracletransaction

編輯:Oracle教程

Oracle——事務(Transaction),oracletransaction


事務:

  事務是指作為單個邏輯工作單元執行的一組相關操作。  

  這些操作要求全部完成或者全部不完成。

使用事務的原因:保證數據的安全有效。

事務的四個特點:(ACID)

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

  2、一致性(Consistence):事務完成時,要使所有所有的數據都保持一致的狀態,換言之:通過事務進行的所有數據修改,必須在所有相關的表中得到反映。

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

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

事務組成:

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

事務的分類:

  1、顯式事務:

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

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

  2、隱式事務:

    (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語句。

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

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

  樂觀鎖:每次都是假設一般情況下不會發生數據沖突,只有數據更新提交的時候,才會對數據的沖突與否進行檢測,如果發生沖突,返回錯誤信息讓用戶處理。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved