什麼是事務?
答:事務是作為單個邏輯工作單元執行的一系列操作。一個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和持久屬性,只有這樣才能成為一個事務。
原子性
事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。(可以這樣理解,不管是一條單獨的語句還是有多條語句組成的,如果是一個事務,那麼它們就是一個整體,一個工作單元,不可再分,都是一起的。要麼全都執行,要麼全都不執行)
一致性
事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部資料結構都必須是正確的。(一致性就是說事務完成時,資料都要保持一致狀態,修改了的就要是修改的,刪除的就要是刪除的,保整資料結構是正確的。)
隔離
由並發事務所作的修改必須與任何其他並發事務所作的修改隔離。事務識別資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是第二個事務修改它之後的狀態,事務不會識別中間狀態的資料。這稱為可串列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執行的狀態相同。(解析:這裡說的意思是並發時,一個事務對一個資料進行的操作不受並發的另一個事務影響。後面會說到隔離等級)
持久性
事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
SQL 程式員要負責啟動和結束事務,同時強制保持資料的邏輯一致性。程式員必須定義資料修改的順序,使資料相對於其組織的商務規則保持一致。程式員將這些修改語句包括到一個事務中,使 SQL Server 2005 Database Engine 能夠強制該事務的物理完整性。
MS SQL SERVER 提供了一種機制,保證每個事務的物理完整性。
1。鎖定裝置,使事務保持隔離。
2。記錄裝置,保證事務的持久性。即使伺服器硬體,作業系統或資料庫引擎執行個體自身出現故障,該執行個體也可以在重新啟動時使用交易記錄,將所有未完成的事務自動地復原到系統出現故障的點。
3.交易管理性,強制保持事務的原子性和一致性。事務啟動之後,就必須成功完成,否則資料庫引擎 執行個體將撤消該事務啟動之後對資料所做的所有修改。
事務有哪幾種?
自動認可事務,明確交易,隱含交易,[批範圍的事務]
自動認可事務
資料庫引擎預設事務,每個單獨的Transact-SQL語句都在其完成後提交,不必指定任何語句來控制事務。
明確交易
通過[API函數]和通過發出Transact-SQL的BEGIN TRANSACTION語句來顯式啟動事務。
隱含交易
通過[APIH函數]或Transact-SQL中的SET IMPLICIT_TRANSACTIONS ON語句,將急性事務模式設定為開啟。下一個語句自動啟動一個新事務。當該事務完成時,下一個Transact-SQL語句又將啟動一個新事務。
[批範圍的事務]
只適用於多個活動的結果集 (MARS),在 MARS 會話中啟動的 Transact-SQL 顯式或隱含交易將變成批範圍的事務。當批處理完成時,如果批範圍的事務還沒有提交或復原,SQL Server 將自動復原該事務。
結束事務
你可以使用COMMIT或ROLLBACK語句,或者通過[API函數]來結束事務
COMMIT
如果事務成功,則提交。COMMIT語句保證事務的所有修改在資料庫中都將永久有效。COMMIT語句還釋放事務使用的資源(例如:鎖)。
RLLBACK
如果事務出現錯誤,或使用者決定取消事務,則復原該事務。ROLLBACK語句通過資料返回到它在事務開始時所處的狀態,來取消事務中的所有修改。ROLLBACK還釋放事務佔用資源。