三、事務的運行模式 通常,事務以3種模式運行,他們分別是: 1. 自動提交事務 每一條單獨的SQL語句都在其執行完成後進行自動提交事務,即執行 SQL 語句後就會馬上自動隱式執行 COMMIT 操作。如果出現錯誤,則進行事務回滾至之前狀態。 SQL SERVER和MY SQL中都預設開啟自動提交事務 ...
三、事務的運行模式
通常,事務以3種模式運行,他們分別是:
1. 自動提交事務
每一條單獨的SQL語句都在其執行完成後進行自動提交事務,即執行 SQL 語句後就會馬上自動隱式執行 COMMIT 操作。如果出現錯誤,則進行事務回滾至之前狀態。
SQL SERVER和MY SQL中都預設開啟自動提交事務,ORACLE則顯式提交事務。這三種產品都提供了各自的方式來開閉自動提交事務模式,具體如下:
1)MYSQL中通過下麵語句來開啟或關閉當前會話或全局的自動提交事務模式。
set session autocommit=0; -- 0是關閉,1是開啟;session是設置當前會話變數,global是設置全局變數
2)SQL SERVER中使用下麵語句來關閉或打開自動提交事務模式 。或者通過 Sql Server Managerment Studio,在 Tools -> Options Query Execution -> SQL Server -> ANSI 選項中勾選SET IMPLICIT_TRANSACTIONS設置開啟還是關閉自動事務提交模式。
SET IMPLICIT_TRANSACTIONS ON; -- ON是打開隱式事務模式或關閉自動事務模式,OFF 是關閉隱式事務模式或打開自動提交事務模式
3)ORACLE通過如下語句開啟或者關閉自動提交事務模式
set autocommit on; -- on是開啟自動事務模式,off是關閉自動提交事務模式
2. 顯式事務
通過指定事務開始語句來顯式開啟事務來作為開始,並由以提交命令或者回滾命令來提交或者回滾事務作為結束的一段代碼就是一個用戶定義的顯式事務。SQL SERVER、MYSQL和ORACLE都以不同的方式來開始顯式事務,具體如下:
1)SQL SERVER 以BEGIN [ TRAN | TRANSACTION ] 作為開始,以COMMIT [ WORK | TRAN | TRANSACTION ] 或者 ROLLBACK [ WORK | TRAN | TRANSACTION ] 作為結束。
2)MYSQL 以START TRANSACTION | BEGIN [WORK]作為開始,以COMMIT [ WORK ] 或者 ROLLBACK [ WORK ] 作為結束。
3)ORACLE事務起始於第一條SQL語句的執行,不需要特別指定事務的開始和結束,一個事務結束就意味著下一事務開始。以COMMIT或不帶有SAVEPOINT子句的ROLLBACK命令作為結束。
3. 隱式事務
在隱式事務中,無需使用BEGIN TRANASACTION 來開啟事務,每個SQL語句第一次執行就會開啟一個事務,直到用COMMIT [TRANSACTION]來提交或者ROLLBACK [TRANSACTION]來回滾結束事務。
1)SQL SERVER中使用下麵語句來開啟和關閉隱式事務模式。或者通過 Sql Server Managerment Studio,在 Tools -> Options Query Execution -> SQL Server -> ANSI 選項中勾選SET IMPLICIT_TRANSACTIONS設置開啟還是關閉隱式事務模式。
SET IMPLICIT_TRANSACTIONS ON --ON是開啟,OFF是關閉
2)ORACLE預設就是隱式開啟事務,顯式提交事務。可以通過下麵語句開啟自動提交事務,以達到隱式提交事務。
SET autocommit ON; -- on是開啟自動事務模式,off是關閉自動提交事務模式
3)MYSQL通過關閉自動提交事務,來達到隱式開啟事務,顯式提交事務的目的。
SET session autocommit = 0; -- 0是關閉,1是開啟;session是設置當前會話變數,global是設置全局變數