1. 程式人生 > >Oracle資料庫中commit和rollback命令

Oracle資料庫中commit和rollback命令

一個數據庫事務起始於一個SQL語句,中止於以下4種事件之一:

COMMIT或ROLLBACK語句
DDL/DCL隱式提交
使用者退出時自動提交
系統強行關閉時取消事務
事務結束後,下一條SQL語句將開始一個新的事務。

語句 功能 
COMMIT 結束當前事務,並將所有資料變更提交資料庫生效 
SAVEPOINT  name 在當前事務內部建立一個儲存點 
ROLLBACK  [TO  SAVEPOINT  name] ROLLBACK指令結束當前事務,並取消所有資料變更。ROLLBACK  TO  SAVEPOINT  name放棄該儲存點,並取消所有在儲存點之後的資料變更

隱式事務提交:


A.一個事務在下列情況下會被自動提交
DDL語句
DCL語句
使用者正常退出資料庫,而缺少顯式的COMMIT或者ROLLBACK。


B.一個事務在下列情況下會被自動回退
使用者異常退出資料庫
系統強行關閉

C.資料在COMMIT/ROLLBACK前的狀態:
事務中所有資料變更都會被臨時存放在資料庫的緩衝池中,直到事務被提交或者回退。因而事務中早先的狀態是可以被恢復的。
使用者可以通過SELECT語句查詢自己發起事務的資料變更,即使事務未被提交。但不能看到他人發起事務中未被提交的資料。
使用者發起事務中的變更資料將被資料庫系統鎖定。除該使用者外,其他使用者不能對鎖定的資料進行變更操作,直到鎖定的資料被提交或回退。

D.資料在COMMIT後的狀態:
資料變更在資料庫中正式生效
資料不可被還原
所有使用者可以看到變更資料
資料鎖將被釋放,一度被鎖定的資料重新可以被所有使用者修改
所有的儲存點(savepoint)都被清除

E.資料在ROLLBACK後的狀態:
所有資料變更都取消,資料狀態恢復到事務開始前
資料鎖將被釋放,一度被鎖定的資料重新可以被所有使用者修改

F.回退到一個儲存點:
使用SAVEPOINT語句建立一個儲存點。如果儲存點名稱已經存在,則新的儲存點將覆蓋舊的儲存點。
使用ROLLBACK  TO  SAVEPOINT語句回退到已有儲存點狀態

總結一下:
1.沒有提交(commit)的資料刪除後無法rollback
2.提交(commit)了的資料刪除後可以使用rollback恢復
3.刪除資料後提交(commit)則無法使用rollback恢復

以上只是在用到的過程中,就隨便搜了一點分享給大家,以後有更多資料了,再接著共享, 對了,還有一點,就是使用delete命令後沒有commit,在程式裡實現插入或者其他操作的時候會一直處在正在執行的狀態,但是commit後就不會出現了~