1. 程式人生 > >劉遠的程式設計技術部落格

劉遠的程式設計技術部落格

事務定義:

事務是作為單個邏輯單元執行的一系列操作,它是一個不可分割的工作邏輯單元。它包含了一組資料庫操作命令,這組命令要麼全部執行,要麼全部不執行。

舉個例子,我們經常用到的 ATM 存取款機,比如轉賬的時候,是先減去轉出賬戶的金額,然後再在指定轉入賬戶的金額加上轉出的金額。如果剛好這個時候轉出的操作已經執行完成,但是由於系統的故障,導致轉入的操作失敗了。那麼怎麼辦?這就需要用到事務了,只要事務裡面有一條命令未成功執行,那麼資料就會回滾到事務開始之前的狀態。

事務特性:

1、原子性(Atomicity):事務是一個完整的操作, 事務中所有操作命令必須作為一個整體提交或回滾。如果事務中任何操作命令失敗,則整個事務將因失敗而回滾。

2、一致性(Consistency):當事務完成時,資料都處於一致狀態。

3、隔離性(Isolation): 對資料進行修改的所有併發事務是彼此隔離的,它不以任何方式依賴或影響其他事務。

4、永續性(Durability):事務提交之後,資料是永久性的,不可再回滾。

事務操作:

1、begin transaction:開始事務。

2、commit transaction:提交事務。

3、rollback transaction:回滾事務。

4、save transaction:事務儲存點。即事務回滾時,可以指定回滾到儲存點,而不進行全部回滾。

事務分類:

1、顯式事務:用 begin transaction 明確指定事務的開始,由 commit transaction 提交事務、rollback transaction 回滾事務到事務結束。

2、隱式事務:通過設定 set implicit_transactions on 語句,將隱式事務模式設定為開啟。當以隱式事務模式操作時,不必使用 begin transaction 開啟事務,當一個事務結束後,這個模式會自動啟用下一個事務,只需使用 commit transaction 提交事務或 Rollback Transaction 回滾事務即可。

3、自動提交事務: 這是 SQL Server 的預設模式,它將每條單獨的 T-SQL 語句視為一個事務。如果成功執行,則自動提交。如果錯誤,則自動回滾。

設定 xact_abort:

設定 xact_abort on/off , 指定是否回滾當前事務,為 on 時如果當前 sql 出錯,回滾整個事務,為 off 時如果 sql 出錯回滾當前 sql 語句,其它語句照常執行讀寫資料庫。

xact_abort 只對執行時出現的錯誤有用,如果sql語句存在編譯時錯誤,那麼他就失靈啦。