Oracle_事務控制語句
事務是對資料庫操作的邏輯單位,在一個事務中可以包含一條或多條DML (資料操縱語言)、DDL (資料定義語言 (Data Definition Language))和DCL (資料控制語言)語句,這些語句組成一個邏輯整體。
事務的執行只有兩種結果:要麼全部執行,把資料庫帶入一個新的狀態,要麼全部不執行,對資料庫不做任何修改。
對事務的操作有兩個:提交( COMMIT )和復原( ROLLBACK )。
提交事務時,對資料庫所做的修改便永久寫入資料庫。
復原事務時,對資料庫所做的修改全部撤銷,資料庫恢複到操作前的狀態。
事務可用於操作資料庫的任何場合,包括應用程式、預存程序、觸發器等。
事務具有四個屬性,這四個屬性的英文單詞首字母合在一起就是ACID 。
這四個屬性是:
·原子性( Atomicity ):事務要麼全部執行,要麼全部不執行,不允許部分執行。
·一致性( Consistency ):事務把資料庫從一個一致狀態帶入另一個一致狀態。
·獨立性( Isolation ):一個事務的執行不受其他事務的影響。
·持久性( Durability ):一旦事務提交,就永久有效,不受關機等情況的影響。
一個事務中可以包含多條DML語句,或者包含一條DDL語句,或者包含一條DCL語句。
事務開始於第一條SQL語句,在下列之一情況下結束:
·遇到COMMIT或ROLLBACK 命令。
·遇到一條DDL或者DCL命令。
·系統發生錯誤、退出或者崩潰。
總之,事務是一系列可以把系統帶入一個新的狀態的操作,如果事務被提交,則資料庫進入一個新的狀態,否則資料庫恢複到事務以前的狀態。
在資料庫中使用事務的好處是首先可以確保資料的一致性,其次在對資料做永久修改之前可以預覽以前的資料改變,還可以將邏輯上相關的操作進行分組。
控制事務的方式有兩種,一種是隱式控制,資料庫管理系統根據實際情況決定提交事務還是復原事務;
另一種方式是顯式控制,在事務的最後放置一條COMMIT或ROLLBACK命令,將事務提交或復原。
如果是隱式控制,那麼事務在遇到一條DDL命令,如CREATE ,或者遇到一條DCL 命令,如GRANT ,或者從SQL *Plus正常退出,即使沒有發出COMMIT或ROLLBACK命令,這個事務將被自動認可。
如果從SQL*Plus非正常退出或發生系統崩潰,那麼系統將自動復原事務。
如果是顯式控制,那麼在事務的最後就要通過COMMIT命令提交事務,或者通過一條ROLLBACK命令復原事務。
如果事務被提交,那麼對資料庫所作的修改將寫人資料庫。
如果復原事務,一般情況下將復原到事務的開始,即對資料庫不做任何修改。
在Oracle 中,允許部分復原事務,即可以將事務有選擇地復原到中間的某個點。
部分復原是通過設定儲存點( SAVEPOINT )來實現的。
事務中可以通過SAVEPOINT命令設定若干個儲存點,這樣可以將事務有選擇地復原到某一個儲存點。
使用者訪問資料庫時,資料庫中的資料是放在緩衝區中的,目前使用者可以通過查詢操作,瀏覽對資料操作的結果。
如果沒有提交事務,其他使用者是看不到事務的修改結果的。
當一個使用者修改表中的資料時,將對被修改的資料加鎖,其他使用者無法在此期間對該行資料進行修改,直到這個使用者提交或回攘這個事務。
如果在事務的最後執行了COMMIT命令,則對資料的修改將被寫入資料庫,以前的資料將永久丟失,無法恢複,其他使用者都可以瀏覽修改後的結果,在資料上加的鎖被釋放,其他使用者可以對資料執行新的修改,在事務中設定的所有儲存點將被刪除
如果在事務中設定了儲存點,並且在事務的最後執行ROLLBACK命令復原到某個儲存點,那麼在此儲存點之後的DML語句所做的修改將被丟棄,但是在此儲存點之前的DML語句所做的修改仍然沒有寫入資料庫,還可以進行提交或復原。