T-SQL - 事務



事務是針對資料庫執行的一組工作單元。事務是按邏輯順序完成的工作單元或序列,無論是使用者手動完成的,還是某種資料庫程式自動完成的。

事務是對資料庫進行一項或多項更改的傳播。例如,如果您正在建立記錄、更新記錄或從表中刪除記錄,那麼您正在對錶執行事務。控制事務對於確保資料完整性和處理資料庫錯誤非常重要。

實際上,您會將許多 SQL 查詢組合到一個組中,並將它們一起作為事務的一部分執行。

事務的特性

事務具有以下四個標準特性,通常用首字母縮寫詞 ACID 來表示:

  • 原子性- 確保工作單元中的所有操作都成功完成;否則,事務在發生故障時中止,之前的操作回滾到其以前的狀態。

  • 一致性- 確保資料庫在成功提交的事務後正確地更改狀態。

  • 隔離性- 使事務能夠獨立於彼此並對彼此透明地執行。

  • 永續性- 確保已提交事務的結果或效果在系統故障的情況下仍然存在。

事務控制

以下命令用於控制事務:

  • COMMIT - 儲存更改。

  • ROLLBACK - 回滾更改。

  • SAVEPOINT - 在事務組內建立回滾點。

  • SET TRANSACTION - 為事務命名。

事務控制命令僅與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。在建立表或刪除表時不能使用它們,因為這些操作會在資料庫中自動提交。

為了在 MS SQL Server 中使用事務控制命令,我們必須使用“begin tran”或 begin transaction 命令開始事務,否則這些命令將不起作用。

COMMIT 命令

COMMIT 命令是用於將事務呼叫的更改儲存到資料庫的事務命令。此命令儲存自上次 COMMIT 或 ROLLBACK 命令以來對資料庫的所有事務。

語法

以下是 COMMIT 命令的語法。

COMMIT; 

示例

考慮 CUSTOMERS 表具有以下記錄。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00 
2   Khilan     25        Delhi             1500.00 
3   kaushik    23        Kota              2000.00 
4   Chaitali   25        Mumbai            6500.00 
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 

以下命令示例將刪除表中年齡 = 25 的記錄,然後將更改提交到資料庫。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25 
COMMIT 

結果,表中的兩行將被刪除,SELECT 語句將產生以下輸出。

ID  NAME       AGE       ADDRESS           SALARY 
1   Ramesh     32        Ahmedabad         2000.00
3   kaushik    23        Kota              2000.00
5   Hardik     27        Bhopal            8500.00 
6   Komal      22        MP                4500.00 
7   Muffy      24        Indore            10000.00 

ROLLBACK 命令

ROLLBACK 命令是用於撤消尚未儲存到資料庫的事務的事務命令。此命令只能用於撤消自發出上次 COMMIT 或 ROLLBACK 命令以來進行的事務。

語法

以下是 ROLLBACK 命令的語法。

ROLLBACK

示例

考慮 CUSTOMERS 表具有以下記錄。

ID  NAME       AGE       ADDRESS            SALARY 
1   Ramesh     32        Ahmedabad          2000.00 
2   Khilan     25        Delhi              1500.00 
3   kaushik    23        Kota               2000.00 
4   Chaitali   25        Mumbai             6500.00 
5   Hardik     27        Bhopal             8500.00 
6   Komal      22        MP                 4500.00 
7   Muffy      24        Indore             10000.00 

以下命令示例將刪除表中年齡 = 25 的記錄,然後回滾資料庫中的更改。

Begin Tran 
DELETE FROM CUSTOMERS 
   WHERE AGE = 25; 
ROLLBACK

結果,刪除操作不會影響表,SELECT 語句將產生以下結果。

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

SAVEPOINT 命令

SAVEPOINT 是事務中的一個點,您可以在此處將事務回滾到某個點,而無需回滾整個事務。

語法

以下是 SAVEPOINT 命令的語法。

SAVE TRANSACTION SAVEPOINT_NAME

此命令僅用於在事務語句之間建立 SAVEPOINT。ROLLBACK 命令用於撤消一組事務。

以下是回滾到 SAVEPOINT 的語法。

ROLLBACK TO SAVEPOINT_NAME

在以下示例中,我們將從 CUSTOMERS 表中刪除三條不同的記錄。我們必須在每個刪除操作之前建立一個 SAVEPOINT,以便我們可以隨時回滾到任何 SAVEPOINT 以將適當的資料返回到其原始狀態。

示例

考慮 CUSTOMERS 表具有以下記錄:

ID  NAME       AGE       ADDRESS          SALARY 
1   Ramesh     32        Ahmedabad        2000.00 
2   Khilan     25        Delhi            1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

以下是操作序列:

Begin Tran 
SAVE Transaction SP1 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 1  
1 row deleted. 
SAVE Transaction SP2 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 2 
1 row deleted.
SAVE Transaction SP3 
Savepoint created. 
DELETE FROM CUSTOMERS WHERE ID = 3 
1 row deleted.

已經進行了三個刪除操作,但是,我們改變了主意,並決定回滾到我們標識為 SP2 的 SAVEPOINT。因為 SP2 是在第一次刪除後建立的,所以最後兩次刪除被撤消了:

ROLLBACK Transaction SP2 
Rollback complete. 

請注意,由於我們回滾到 SP2,所以只進行了第一次刪除。

SELECT * FROM CUSTOMERS 

已選擇 6 行。

ID  NAME       AGE       ADDRESS          SALARY 
2   Khilan     25        Delhi        1500.00 
3   kaushik    23        Kota             2000.00 
4   Chaitali   25        Mumbai           6500.00 
5   Hardik     27        Bhopal           8500.00 
6   Komal      22        MP               4500.00 
7   Muffy      24        Indore           10000.00 

SET TRANSACTION 命令

SET TRANSACTION 命令可用於啟動資料庫事務。此命令用於指定後續事務的特性。

語法

以下是 SET TRANSACTION 的語法。

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>
廣告
© . All rights reserved.