1. 什麼是事務
事務用於保證數據的一致性,它由一組相關的dml語句組成,該組的dml(數據操作語言,增刪改,沒有查詢)語句要麼全部成功,要麼全部失敗。
例:網上轉賬就是典型的要用事務來處理,用於保證數據的一致性。
2. 事務和鎖
當執行事務操作時(dml語句),oracle會在被作用的表上加鎖,防止其它用戶修改表的結構。這裏對我們的用戶來講是非常重要的。其它進程排序,知道1號進程完成,鎖打開,2號進程進入。依次進行,如果有進程級別較高的,可以插隊。
3. 提交事務
當執行commit語句可以提交事務。當執行了commit語句之後,會確認事務的變化、結束事務。刪除保存點、釋放鎖,當使用commit語句結束事務之後,其它會話將可以查看到事務變化後的新數據。
保存點就是爲回退做的。保存點的個數沒有限制。
4. 回退事務
在介紹回退事務前,我們先介紹一下保存點(savepoint)的概念和作用。保存點是事務中的一點。用於取消部分事務,當結束事務時,會自動的刪除該事務所定義的所有保存點。當執行rollback時,通過指定保存點可以回退到指定的點,這裏我們作圖說明。
5. 事務的幾個重要操作
(1). 設置保存點 savepoint a
(2). 取消部分事務 rollback to a
(3). 取消全部事務 rollback
這個回退事務,必須是沒有commit前使用的;如果事務提交了,那麼無論你剛纔做了多少個保存點,都統統沒有。如果沒有手動執行commit,而是exit了,那麼會自動提交。
6. java程序中如何使用事務
在java操作數據庫時,爲了保證數據的一致性,比如賬戶操作(1)從一個賬戶中減掉10$(2)在另一個賬戶上加入10$,我們看看如何使用事務?
- // 從scott的sal中減去100
- sm.executeUpdate("update emp set sal=sal-100 where ename='SCOTT'");
- int i = 7 / 0;
- // 給smith的sal加上100
- sm.executeUpdate("update emp set sal=sal+100 where ename='SMITH'");
運行,會出現異常,查看數據庫,SCOTT的sal減了100,但是SMITH的sal卻不變.