事務具有四個特徵
1 、原子性(a
tomicity)
事務是資料庫的邏輯工作單位,事務中包含的各操作要麼都做,要麼都不做
2 、一致性 (consistency)
資料庫事務不能破壞關聯式資料庫的完整性以及業務邏輯上的一致性。
3 、隔離性 (isolation)
乙個事務的執行不能其它事務干擾。即乙個事務內部的操作及使用的資料對其它併發事務是隔離的,併發執行的各個事務之間不能互相干擾。
4 、持續性(durability)
也稱永久性,指乙個事務一旦提交,它對資料庫中的資料的改變就應該是永久性的。接下來的其它操作或故障不應該對其執行結果有任何影響。
事務應用場景
對於同乙個銀行帳戶a內有200元,甲進行提款操作100元,乙進行轉帳操作100元到b帳戶。如果事務沒有進行隔離可能會併發如下問題:
髒讀(dirty read):
乙個事務讀到另乙個事務未提交的更新資料.
事務t1更新了資料還未提交,這時事務t2來讀取相同的資料,則t2讀到的資料其實是錯誤的資料,即髒資料。基於髒資料所作的操作是不可能正確的 。
髒讀:甲取款100元未提交,乙進行轉帳查到帳戶內剩有100元,這是甲放棄操作回滾,乙正常操作提交,帳戶內最終為0元,乙讀取了甲的髒資料,客戶損失100元。
解讀:甲進行回滾操作,賬戶將變成200元,乙進行正常提交,200元將被覆蓋為0,故顧客損失100元
第一類丟失更新: 撤銷乙個事務時,把其他事務已提交的更新資料覆蓋。
例子:首先甲提款時帳戶內有200元,同時乙轉帳也是200元,然後甲乙同時操作,甲操作成功取走100元,乙操作失敗回滾,帳戶內最終為200元,這樣甲的操作被覆蓋掉了,銀行損失100元。
不可重複讀(nonrepeatable read)
:乙個事務讀到另乙個事務已提交的更新資料。
乙個事務的兩次讀取中,讀取相同的資源得到不同的值。當事務t2在事務t1的兩次讀取之間更新資料,則會發生此種錯誤。(重點在修改)
例子:甲乙同時開始都查到帳戶內為200元,甲先開始取款100元提交,這時乙在準備最後更新的時候又進行了一次查詢,發現結果是100元,這時乙就會很困惑,不知道該將帳戶改為100還是0。
事務隔離級別
1 serializable 最嚴格的spring事務隔離級別,事務序列執行,資源消耗最大 3 read committed 大多數主流資料庫的預設spring事務隔離等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了 髒讀取 該級別適用於大多數系統。4 read uncommi...
事務隔離級別
四種隔離級別 隔離級別 髒 讀不可重複讀取 幻 像讀操作未提交 read uncommitted 是是 是讀操作已提交 read committed 否是 是可重複讀 repeatable read 否否 是快照否否 否可序列讀 serializable 否否 否 sql server 還支援使用行...
事務隔離級別
需要防止的現象和事務隔離級別 ansi iso sql 標準 sql92 定義了四種事務隔離級別 transaction isolation level 這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。三種...