當我們談起隔離的時候,我們總是假定兩個物體直接要麼隔離要麼不隔離;但是實際上,兩者直接沒有那麼明顯的界限。
當我們說資料庫的事務的時候,完全隔離需要花費高的代價。你不能阻止世界用多使用者聯機事務處理系統獲取資料。
因此,有很多的隔離級別可以供我們選擇。當然,其中有些選項,是隔離級別較弱的,但是能提公升效能和系統的伸縮性。
事務隔離級別
事務隔離性問題
首先,我們看一下幾個消弱隔離性的幾個可能會出現的場景,ansi sql標準定義了幾個資料庫系統允許的隔離性級別。
圖11.1展示了更新丟失的問題:兩個對一行資料的更新同時進行,第乙個更新先完成,第二個發生了異常,此時回滾,那麼第乙個修改的就會連帶回滾,資料丟失。這發生在沒有鎖的系統中,此時沒有隔離併發事務。
圖11.2展示了髒讀的發生情況: 髒讀取出現在乙個事務讀另乙個事務修改但是還沒有提交的資料的時候。這很危險,因為另乙個事務進行的改變很可能會回滾,並且第乙個事務可能會得到非法資料(and invaliddata may be written by the first transaction);
圖11.3展示了讀不重複資料的情況:這時,事務兩次讀取資料,並且兩次讀取的資料是不一致的。例如,兩次讀取的時候,另乙個事務對其進行了更新,導致兩次讀取資料不一致。
圖11.4展示了後更新覆蓋先更新的問題:讀不重複的乙個特殊情況就是後提交者獲勝。假設兩個併發的事務都讀取資料,乙個更新它並提交,另乙個也更新並提交,那麼最終是以第二個更新為準的,第乙個更新就被覆蓋了。這種情況對使用者來說是很有迷惑性的,a使用者在不被知曉的情況下,被b的資料覆蓋掉了,b通過乙個過時的資訊做出了決定。
圖11.5展示了幻讀的情況:這是說,在乙個事物兩次查詢的過程中,有另乙個事務,對其資料進行了刪除或者插入操作,兩次讀的就出現了不同的情況。
既然你知道了會發生的最壞的情況,我們將會定義隔離級別和看各種級別能解決哪些問題。
hibernate5 主鍵生成策略
1 hibernate自己維護主鍵的值。首先獲取該表中最大主鍵值,然後加一插入。主鍵字段對應的屬性型別可以是int short long以及其封裝型別。在高併發或者集群的情況下不能使用。2 identity 使用資料庫自身自增長來維護。id name id column tid generator ...
新手上路之Hibernate(5) 繼承對映
之前的幾篇文章主要介紹的是關係對映。之所以用好幾篇的文章來介紹關係對映,其重要性與常用行可見一斑。還有一種對映,也就是今天要介紹的 繼承對映,也是很重要的一種對映模式。繼承對映的實現有三種策略 1 單錶繼承。每棵類繼承樹使用乙個表。2 具體表繼承。每個子類乙個表。3 類表繼承。每個具體類乙個表。下面...
學習筆記之理解物件導向程式設計
物件導向程式設計在近些年來被更多的人接受 認可與推廣,當然是因為有著相比於面向過程程式設計顯而易見的優點。面向過程的程式設計的核心就在於過程,是按照步驟一步步直到解決問題,就像高效的生產線。但是這樣的過程被設計出來是為了解決目前的問題,想要解決其他問題,更改流程是很困難的,牽一髮而動全身。也就是說,...