要想解決資料的的髒讀幻讀和不可重複讀,首先要了解事務的隔離級別
一致性
隔離性
永續性
原子性
當執行失敗,所有的修改都會恢復到修改之前的狀態。
在對修改的資料提交之前,對其他事務不可見。
通俗的講就是儲存到資料庫永久儲存(感覺是滴)。
任何執行過程中的失敗,都將導致操作的失敗。
髒讀:讀取到尚未提交的資料。
不可重複讀:前後多次讀取,資料內容不一致。
幻讀:前後多次讀取資料總量不一致。
這裡的幻讀和不可重複度有點不好理解,具體的區別是:
對應不同的操作:
不可重複度:insert update
幻讀:insert delete
髒讀:------修改時加排他鎖 讀取時加共享鎖
不可重複度:------讀取時加共享鎖 寫資料時加排他鎖
幻讀:------範圍鎖------鎖定檢索範圍為唯讀
事務傳播行為
如果存在乙個事務,則加入到當前事務。如果沒有事務則開啟乙個新的事務。
總是開啟乙個新的事務。如果存在乙個事務,則將這個存在的事務掛起,再來乙個新的。
如果存在乙個事務,則加入到當前事務。如果沒有事務則非事務執行。
總是非事務地執行,並掛起任何存在的事務。
如果存在乙個事務,則加入到當前事務。如果沒有事務,則丟擲異常。
總是非事務地執行,如果存在乙個活動事務,則丟擲異常。
如果乙個活動的事務存在,則執行在乙個巢狀的事務中。如果沒有活動事務, 則開啟乙個新的事
務。內層事務依賴於外層事務。外層事務失敗時,會回滾內層事務所做的動作。
而內層事務操作失敗並不會引起外層事務的回滾。
唯讀事務
timeout_default 事務的超時時間,需要底層資料庫支援才能使用此配置,-1代表無限制。
事務傳播行為指的就是當乙個業務方法【被】 另乙個業務方法呼叫時,應該如何進行事務控制。
總結:spring中的事務控制主要就是通過這三個api實現的
platformtransactionmanager 負責事務的管理,他是個介面,其子類負責具體工作
transactiondefinition 定義了事務的一些相關引數
transactionstatus 代表事務執行的乙個實時狀態
可以簡單的理解三者的關係:事務管理器通過讀取事務定義引數進行事務管理,然後會產生一系列的事務狀態。
髒讀,不可重複度,幻讀
事物a讀取事物b尚未提交的資料,此時事物b發生回滾,那麼事物a讀到的資料就是髒資料,俗稱髒讀 這類情況長發生在轉賬和取款操作中 事物a在執行讀取操作,由於事物a比較大,前後讀取同一條資料需要經歷很長的時間 而在事務a第一次讀取資料,比如此時讀取了小明的年齡為20歲,事務b執行更改操作,將小明的年齡更...
資料庫幻讀 髒讀 不可重複讀
要理解幻讀 髒讀 不可重複讀,必須先搞清楚事務的隔離級別 資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable 這四個級別可以逐個解決髒讀 不可重複讀 幻讀 這幾類問題。隔離級別 髒讀不可重...
資料庫髒讀 不可重複讀 幻讀
資料庫髒讀 不可重複讀 幻讀 1.髒讀 髒讀就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。2.不可重複讀 是指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。那麼,在第乙個...