數據庫事務
2024-07-21 02:06:37
供稿:網友
關于事務的隔離性
例如:統計定單系統中事務活動 如下
1.事務t1打印定單表中的記錄
2.t2向定單表插入了新的定單,t2提交
3.事務t1統計定單表中的的記錄總數,t1提交
因為事務t2在t1結束前向定單表中插入了新的記錄,導致事務t1打印的定單記錄數量和t1統計的定單數量不一致.
產生并發異常問題的主要原因是并發操作破壞了事務的隔離性,導致數據不一致.如何使一個事務不受到其它事務的干擾,保證數據一致性???
完整的例子代碼,在線等待,謝謝大家的關心:)
事務
事務是作為單個邏輯工作單元執行的一系列操作。一個邏輯工作單元必須有四個屬性,稱為 acid(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務:
原子性
事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。
一致性
事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用于事務的修改,以保持所有數據的完整性。
事務結束時,所有的內部數據結構(如 b 樹索引或雙向鏈表)都必須是正確的。
隔離性
由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,
要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,因為它能夠重新裝載起始數據,并且重播一系列事務,
以使數據結束時的狀態與原始事務執行的狀態相同。
持久性
事務完成之后,它對于系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
指定和強制事務處理
sql 程序員要負責啟動和結束事務,同時強制保持數據的邏輯一致性。程序員必須定義數據修改的順序,使數據相對于其組織的業務規則保持
一致。然后,程序員將這些修改語句包括到一個事務中,使 microsoft® sql server™ 能夠強制該事務的物理完整性。
企業數據庫系統(如 sql server)有責任提供一種機制,保證每個事務物理的完整性。sql server 提供:
鎖定設備,使事務相互隔離。
記錄設備,保證事務的持久性。即使服務器硬件、操作系統或 sql server 自身出現故障,sql server 也可以在重新啟動時使用事務日志,
將所有未完成的事務自動地回滾到系統出現故障的位置。
事務管理特性,強制保持事務的原子性和一致性。事務啟動之后,就必須成功完成,否則 sql server 將撤消該事務啟動之后對數據所作的所有修改。