資料庫資料髒讀幻讀不可重複度的解決

2021-09-25 20:58:18 字數 1420 閱讀 4273

要想解決資料的的髒讀幻讀和不可重複讀,首先要了解事務的隔離級別

一致性

隔離性

永續性

原子性

當執行失敗,所有的修改都會恢復到修改之前的狀態。

在對修改的資料提交之前,對其他事務不可見。

通俗的講就是儲存到資料庫永久儲存(感覺是滴)。

任何執行過程中的失敗,都將導致操作的失敗。

髒讀:讀取到尚未提交的資料。

不可重複讀:前後多次讀取,資料內容不一致。

幻讀:前後多次讀取資料總量不一致。

這裡的幻讀和不可重複度有點不好理解,具體的區別是:

對應不同的操作:

不可重複度: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.不可重複讀 是指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。那麼,在第乙個...