Oracle基礎(七):資料庫事務,oracle事務

來源:互聯網
上載者:User

Oracle基礎(七):資料庫事務,oracle事務
一、基本概念1、事務(Transaction):是並發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。例如,銀行轉賬工作:從一個帳號扣款並使另一個帳號增款,這兩個操作要麼都執行,要麼都不執行。所以,應該把它們看成一個事務。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性。
2、事務與鎖當執行事務操作時,oracle會在被作用的表上家鎖,防止其他使用者改表的結構。
3、事務的操作過程1)事務的開始(預設自動開始):setAutoCommit(false)2)設定儲存點:savepoint pointAA

  • 可以設定多個儲存點
  • 一旦回退以後,不能再次回退。
3)復原到儲存點(提交後無法復原):rollback to pointAA;4)事務提交:commit
2、事務具有以下4個基本特徵。
  • Atomic(原子性):事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗。  
  • Consistency(一致性):只有合法的資料可以被寫入資料庫,否則事務應該將其復原到最初狀態。
  • Isolation(隔離性):事務允許多個使用者對同一個資料進行並發訪問,而不破壞資料的正確性和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。
  • Durability(持久性):事務結束後,交易處理的結果必須能夠得到固化。 
3、事務的語句
  • 開始事物:BEGIN TRANSACTION 
  • 提交事物:COMMIT TRANSACTION 
  • 復原事務:ROLLBACK TRANSACTION
4、事務的儲存點     SAVEPOINT pointName 儲存點名稱 --自訂儲存點的名稱和位置     ROLLBACK TO pointName  儲存點名稱 --復原到自訂的儲存點
二、交易隔離等級(isolation )
(一)標準交易隔離等級1、READ UNCOMMITTED:讀未提交
  • 發生髒讀
2、READ COMMITTED:讀已提交
  • 在trasaction A中讀取資料時對記錄添加共用鎖定,但讀取結束立即釋放。其它transaction B對這個記錄的試圖修改會一直等待直到A中的讀取過程結束,而不需要整個trasaction A的結束。所以,在trasaction A的不同階段對同一記錄的讀取結果可能是不同的。
  • 可能發生的問題:不可重複讀取。
3、REPEATABLE READ:可重複讀
  • 對於讀出的記錄,添加共用鎖定直到transaction A結束。其它transaction B對這個記錄的試圖修改會一直等待直到trasaction A結束。  
  • 可能發生的問題:當執行一個範圍查詢時,可能會發生幻讀。
4、SERIALIZABLE:序列化
  • 添加範圍鎖(比如表鎖,頁鎖等),直到transaction A結束。以此阻止其它trasaction B對此範圍內的insert,update等操作。 
  • 幻讀,髒讀,不可重複讀取等問題都不會發生。


(二)事務的問題1、髒讀
  • 當一個事務 A 讀取另一個事務B 尚未提交的修改時,產生髒讀。
2、不可重複讀取
  • 同一查詢在同一事務 A 中多次進行,由於其他提交事務 B 所做的修改或者刪除,每次返回不同的結果集,此時發生非重複讀。
3、幻讀
  • 同一查詢在同一事務 A 中多次進行,由於其他提交事務 B 所做的插入操作,每次返回不同的結果集,此時發生幻讀。
(三)Oracle的隔離劑別1、SQL92標準的1)READ COMMITTED:讀已提交
  • 這是oracle 預設的事務隔離機制
  • 保證不會髒讀,單可能出現非重複讀和幻讀。
2)SERIALIZABLE:序列化
  • 提供了事務看起來像隊列一樣一個一個順序執行。
  • 僅僅能看到在本事務開始前由其他事務提交的更改和在本事務中所做的更改。
  • 保證不會出現髒讀、不可重複讀取和幻讀
  • serializable:提供了read-only 事務所提供的讀一致性,同時又允許DML(update\insert\delete)操作
2、非SQL92標準:read-only
  • 保證不會出現髒讀、不可重複讀取和幻讀
  • 只能讀,不能操作DML(update\insert\delete)操作。

(四)設定Oracle的隔離劑別1、設定一個事務的隔離等級
  • set transcation isolation level read committed;
  • set transcation isolation level serializable;
  • set transcation read-only;
2、設定整個會話的隔離等級
  • alter session set isolation_level read committed;
  • alter session set isolation_level serializable;






















相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.