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