T-SQL 事務(wù)

2018-12-14 16:51 更新

事務(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ù)屬性

事務(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ù)控制

一下命令用于控制事務(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命令

COMMIT命令是用于將事務(wù)調(diào)用的更改保存到數(shù)據(jù)庫(kù)的事務(wù)命令。 此命令將自上次COMMIT或ROLLBACK命令以來(lái)將所有事務(wù)保存到數(shù)據(jù)庫(kù)。

語(yǔ)法

以下是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命令

ROLLBACK命令是用于撤銷尚未保存到數(shù)據(jù)庫(kù)的事務(wù)的事務(wù)性命令。 此命令只能用于在發(fā)出最后一個(gè)COMMIT或ROLLBACK命令后撤消事務(wù)。

語(yǔ)法

以下是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命令

SAVEPOINT命令可以使事務(wù)回滾到某個(gè)點(diǎn)節(jié)點(diǎn),而不回滾整個(gè)事務(wù)。

語(yǔ)法

以下是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命令

SET TRANSACTION命令可用于啟動(dòng)數(shù)據(jù)庫(kù)事務(wù)。 此命令用于指定隨后事務(wù)的特性。

語(yǔ)法

以下是SET TRANSACTION語(yǔ)法。

SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)