事務是針對數(shù)據(jù)庫執(zhí)行的工作單元。 事務是以邏輯順序完成的單元或工作序列,無論是以用戶的手動方式還是以某種數(shù)據(jù)庫程序自動進行。
事務是將一個或多個執(zhí)行命令發(fā)送到數(shù)據(jù)庫。例如,你正在創(chuàng)建記錄,修改記錄或者從表中刪除記錄,這些行為都是對表進行事務操作。事務對于確保數(shù)據(jù)完整性和處理數(shù)據(jù)庫錯誤是非常重要的。
實際上,你常常會將許多SQL操作分成一組事務一起執(zhí)行。
事務具有以下四個標準屬性,通常由首字母縮寫ACID簡稱 -
原子性 -確保工作單元內的所有操作成功完成; 否則,事務在故障點處中止,并且先前的操作被回滾到它們的原先狀態(tài)。
一致性 -確保數(shù)據(jù)庫在成功提交的事務后正確更改狀態(tài)。
隔離性 -事務之間是獨立運行互不相關的。
持久性 -事務一旦被執(zhí)行,即使系統(tǒng)故障,其結果依然有效。
一下命令用于控制事務
COMMIT-提交事務。
ROLLBACK -回滾事務。
SAVEPOINT -創(chuàng)建事務的回滾節(jié)點。
SET TRANSACTION -設置事務名稱。
事務控制命令僅與DML命令INSERT,UPDATE和DELETE一起使用。 在創(chuàng)建表或刪除它們時,不能使用它們,因為這些操作會在數(shù)據(jù)庫中自動提交。
為了在MS SQL Server中使用事務控制命令,我們必須以“begin tran”或begin transaction命令開始事務,否則這些命令將不起作用。
COMMIT命令是用于將事務調用的更改保存到數(shù)據(jù)庫的事務命令。 此命令將自上次COMMIT或ROLLBACK命令以來將所有事務保存到數(shù)據(jù)庫。
以下是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
以下命令示例將從刪除從CUSTOMERS表中刪除所有年齡等于25的用戶記錄。
Begin Tran DELETE FROM CUSTOMERS WHERE AGE = 25 COMMIT
上述命令將產(chǎn)生以下結果集:
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命令是用于撤銷尚未保存到數(shù)據(jù)庫的事務的事務性命令。 此命令只能用于在發(fā)出最后一個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
下面的命令將從CUSTOMERS表中刪除年齡等于25的用戶記錄,然后使用ROLLBACK命令,回滾數(shù)據(jù)。
Begin Tran DELETE FROM CUSTOMERS WHERE AGE = 25; ROLLBACK
使用ROLLBACK命令,刪除操作不會影響表中的數(shù)據(jù),執(zhí)行后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
SAVEPOINT命令可以使事務回滾到某個點節(jié)點,而不回滾整個事務。
以下是SAVEPOINT命令的語法。
SAVE TRANSACTION SAVEPOINT_NAME
此命令僅用于在事務語句之間創(chuàng)建SAVEPOINT。 ROLLBACK命令用于撤消一組事務。
以下是回滾到一個事務節(jié)點的語法。
ROLLBACK TO SAVEPOINT_NAME
在下面的示例中,我們將從CUSTOMERS表中刪除三個不同的記錄。 我們將在每次刪除之前創(chuàng)建一個SAVEPOINT,以便我們可以隨時將ROLLBACK任何SAVEPOINT返回到其原始狀態(tài)的相應數(shù)據(jù)。
請參考具有以下記錄的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.
三個刪除已經(jīng)發(fā)生,但是,我們改變了主意,決定ROLLBACK到SAVEPOINT,我們確定為SP2。 因為SP2是在第一次刪除后創(chuàng)建的,所以最后兩個刪除被撤消
ROLLBACK Transaction SP2 Rollback complete.
請注意,我們回滾到SP2后,相當于只發(fā)生了第一次刪除。
SELECT * FROM CUSTOMERS
查詢后的結果為6條記錄:
ID NAME AGE ADDRESS SALARY 2 Khilan 25 Ahmedabad 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命令可用于啟動數(shù)據(jù)庫事務。 此命令用于指定隨后事務的特性。
以下是SET TRANSACTION語法。
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>
更多建議: