- T-SQL 教程
- T-SQL - 首頁
- T-SQL - 概述
- T-SQL - 資料型別
- T-SQL - 建立表
- T-SQL - 刪除表
- T-SQL - INSERT 語句
- T-SQL - SELECT 語句
- T-SQL - UPDATE 語句
- T-SQL - DELETE 語句
- T-SQL - WHERE 子句
- T-SQL - LIKE 子句
- T-SQL - ORDER BY 子句
- T-SQL - GROUP BY 子句
- T-SQL - DISTINCT 子句
- T-SQL - 表連線
- T-SQL - 子查詢
- T-SQL - 儲存過程
- T-SQL - 事務
- T-SQL - 索引
- T-SQL - 函式
- T-SQL - 字串函式
- T-SQL - 日期函式
- T-SQL - 數值函式
- T-SQL 有用資源
- T-SQL - 快速指南
- T-SQL - 有用資源
- T-SQL - 討論
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>
