1、 什麼是事務
事務是用於保證數據的一致性,它由一組相關的DML語句組成,該組的DML語句要麼全部成功,要麼全部失敗。如:網上轉賬……
2、 事務和鎖
當執行事務操作(dml語句)時,oracle會在被作用的表上加鎖,防止其他用戶改變表的結構,這點對我們用戶來講是很重要的。
3、 保存點和回退事務
保存點是事務中的一點,用於取消部分事務,當結束事務時,會自動的刪除該事務定義的所有保存點,當執行rollback時,通過指定保存點可以回退到指定的點。
4、 提交事務
使用commit語句可以提交事務,當執行了commit語句後,會確認事務的變化、結束事務、刪除保存點、釋放鎖、當使用commit語句結束事務後,其它會話將可以查看到事務變化後的新數據。
5、 如何在Java中操作事務呢
其實很簡單,oracle是默認自動提交事務的,那麼我們只要在執行事務語句之前取消自動提交,執行事務的語句過後再手動提交就可以了
假設我這有一個Connection對象的實例conn,調用這個函數:
conn.setAutoCommit(false);就可以取消自動提交了,然後我們執行一系列的中間不能打斷的DML語句,完了再在最後加上這麼一句:conn.commit();就可以了,如果一旦發生異常,在catch語句塊中加上conn.rollback();就OK了。
6、 只讀事務
只讀事務是指只允許執行查詢的操作,而不允許執行任何其它DML操作的事務,使用只讀事務可以確保用戶只能取得某時間點的數據。假定機票代售點每天18點統計今天的銷售情況,這時可以使用只讀事務,在設置了只讀事務後,儘管其它會話可能會提交新的事務,但是隻讀事務將不會取得最新數據的變化,從而可以保證取得特定時間點的數據信息。
7、 設置只讀事務
Set transaction read only
Oracle的一個事務是以第一個可執行的SQL語句開始,當下列事件之一發生時結束。
l 用戶執行了commit語句(提交)
l 用戶執行了rollback語句(回滾)
l 用戶執行了DDL語句(該類型的語句是自動提交)
l 用戶執行了DCL語句(該類型的語句是自動提交)
l 用戶正常退出SQL*PLUS(自動提交)
l 用戶非正常退出SQL*PLUS(自動回滾)
l 系統崩潰,包括硬件或軟件故障(自動回滾)
其中,直接單擊SQL*PLUS窗口的關閉按鈕屬於非正常退出。
單獨或結合使用disconn 或exit 命令屬於正常退出。
Set autocommit on/off 開啓或關閉自動提交功能
注:
在進行事務處理中,oracle數據庫系統採取了這樣一種方式:即有人對數據庫進行讀寫操作(即DML操作)時,Oracle系統是允許其他人進行對數據庫進行讀操作的。這是因爲Oracle有一個或多個稱爲回滾段的磁盤區,當有人對數據庫中的數據進行任何寫操作(DML操作)時,Oracle數據庫首先將原始的數據複製到回滾段中,之後才做相應的操作,在事務處理結束之前其他的用戶可以讀這些數據,但讀的是回滾段上的數據。
所以對於要刪除大量的數據行的操作時,儘量用truncate語句而不要用delete語句,因爲truncate語句屬於DDL 語句,不需要使用回滾段。