[table]
|問題 |簡稱 |解決方法 |使用到的資料庫鎖 |隔離級別
|兩個事務都同時更新一行資料,乙個事務對資料的更新把另乙個事務對資料的更新覆蓋了。 |更新丟失 |如果乙個事務已經開始寫資料,則另外乙個事務則不允許同時進行寫操作,但允許其他事務讀此行資料。 |排他寫鎖 |read uncommitted 未授權讀取|
|乙個事務讀取到了另乙個事務未提交的資料操作結果。 |髒讀 |讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行。 |瞬間共享讀鎖,排他寫鎖 |read committed 授權讀取|
|事務t1讀取某一行資料後,事務t2對其做了修改,當事務t1再次讀該資料時得到與前一次不同的值。 |不可重複讀 |讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。 |共享讀鎖,排他寫鎖 |repeatable read 可重複讀取|
|在兩次查詢過程中有另外乙個事務插入或刪除了一行資料,導致第二次查詢的結果包含了第一次查詢中未出現的資料或者缺少了第一次查詢中出現的資料。 |幻讀 |它要求事務序列化執行,事務只能乙個接著乙個地執行,但不能併發執行。 |僅僅通過「行級鎖」是無法實現事務序列化的,必須通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到。 |serializable 序列化|
[/table]
小結:隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。對於多數應用程式,可以優先考慮把資料庫系統的隔離級別設為read committed。它能夠避免髒讀取,而且具有較好的併發效能。儘管它會導致不可重複讀、幻讀和第二類丟失更新這些併發問題,在可能出現這類問題的個別場合,可以由應用程式採用悲觀鎖或樂觀鎖來控制。
事務隔離級別
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 這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。三種...