時間:2024-02-05 12:47作者:下載吧人氣:22
在數(shù)據(jù)庫中有時候需要把多個步驟的指令當(dāng)作一個整體來運行,這個整體要么全部成功,要么全部失敗,這就需要用到事務(wù)。
事務(wù)有若干條T-SQL指令組成,并且所有的指令昨晚一個整體提交給數(shù)據(jù)庫系統(tǒng),執(zhí)行時,這組指令要么全部執(zhí)行完成,要么全部取消。因此,事務(wù)是一個不可分割的邏輯單元。
事務(wù)有4個屬性:原子性(Atomicity
)、一致性(Consistency
)、隔離性(Isolation
)以及持久性(Durability
),也稱作事務(wù)的ACID屬性。
原子性:事務(wù)內(nèi)的所有工作要么全部完成,要么全部不完成,不存在只有一部分完成的情況。
一致性:事務(wù)內(nèi)的然后操作都不能違反數(shù)據(jù)庫的然后約束或規(guī)則,事務(wù)完成時有內(nèi)部數(shù)據(jù)結(jié)構(gòu)都必須是正確的。
隔離性:事務(wù)直接是相互隔離的,如果有兩個事務(wù)對同一個數(shù)據(jù)庫進(jìn)行操作,比如讀取表數(shù)據(jù)。任何一個事務(wù)看到的所有內(nèi)容要么是其他事務(wù)完成之前的狀態(tài),要么是其他事務(wù)完成之后的狀態(tài)。一個事務(wù)不可能遇到另一個事務(wù)的中間狀態(tài)。
持久性:事務(wù)完成之后,它對數(shù)據(jù)庫系統(tǒng)的影響是持久的,即使是系統(tǒng)錯誤,重新啟動系統(tǒng)后,該事務(wù)的結(jié)果依然存在。
a、 顯示事務(wù)
顯示事務(wù)就是用戶使用T-SQL明確的定義事務(wù)的開始(begin transaction
)和提交(commit transaction
)或回滾事務(wù)(rollback transaction
)
b、 自動提交事務(wù)
自動提交事務(wù)是一種能夠自動執(zhí)行并能自動回滾事務(wù),這種方式是T-SQL的默認(rèn)事務(wù)方式。例如在刪除一個表記錄的時候,如果這條記錄有主外鍵關(guān)系的時候,刪除就會受主外鍵約束的影響,那么這個刪除就會取消。
可以設(shè)置事務(wù)進(jìn)入隱式方式:set implicit_transaction on;
c、 隱式事務(wù)
隱式事務(wù)是指當(dāng)事務(wù)提交或回滾后,SQL Server自動開始事務(wù)。因此,隱式事務(wù)不需要使用begin transaction
顯示開始,只需直接失業(yè)提交事務(wù)或回滾事務(wù)的T-SQL語句即可。
使用時,需要設(shè)置set implicit_transaction on
語句,將隱式事務(wù)模式打開,下一個語句會啟動一個新的事物,再下一個語句又將啟動一個新事務(wù)。
常用T-SQL事務(wù)語句:
a、 begin transaction語句
開始事務(wù),而@@trancount全局變量用來記錄事務(wù)的數(shù)目值加1,可以用@@error全局變量記錄執(zhí)行過程中的錯誤信息,如果沒有錯誤可以直接提交事務(wù),有錯誤可以回滾。
b、 commit transaction語句
回滾事務(wù),表示一個隱式或顯示的事務(wù)的結(jié)束,對數(shù)據(jù)庫所做的修改正式生效。并將@@trancount的值減1;
c、 rollback transaction語句
回滾事務(wù),執(zhí)行rollback tran語句后,數(shù)據(jù)會回滾到begin tran的時候的狀態(tài)
網(wǎng)友評論