1. 程式人生 > >事務及事務的特點歸納

事務及事務的特點歸納

事務:
  事務是指作為單個邏輯工作單元執行的一組相關操作。  
  這些操作要求全部完成或者全部不完成。
使用事務的原因:保證資料的安全有效。

事務的四個特點:(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語句。
為了保證效能:樂觀鎖,悲觀鎖
       悲觀鎖:每次都是假設資料肯定會衝突,資料開始讀取時就把資料給鎖住。
  樂觀鎖:每次都是假設一般情況下不會發生資料衝突,只有資料更新提交的時候,才會對資料的衝突與否進行檢測,如果發生衝突,返回錯誤資訊讓使用者處理。