資料庫及spring事務隔離級別與傳播機制

2021-09-26 01:52:02 字數 1412 閱讀 5528

資料庫事務隔離機制:

read uncommitted:最低的隔離級別,什麼都不需要做,乙個事務可以讀到另乙個事務未提交的結果。所有的併發事務問題都會發生。

read committed只有在事務提交後,其更新結果才會被其他事務看見。解決髒讀問題。

repeated read:在乙個事務中,對於同乙份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否提交。可以解決髒讀、不可重複讀。

serialization:事務序列化執行,隔離級別最高,犧牲了系統的併發性。可以解決併發事務的所有問題。通常,在工程實踐中,為了效能的考慮會對隔離性進行折中。

髒讀:乙個事務的處理過程讀取了另乙個還沒有提交的事務;

不可重複讀:乙個事務範圍內多次查詢得到了不同的結果,因為查詢間隔導致被另乙個事務修改並提交 更新update 操作;

虛讀(幻讀):「當事務a要對資料表中某個欄位的所有值進修改操作,此時有乙個事務是插入一條記錄 並提交給資料庫,當提交事務a 的使用者再次檢視時就會發現有一行資料未被修改,其實是事務b剛剛新增進去的」  這就是幻讀 插入insert操作(或者delete操作);

spring隔離級別:

1、isolocation_default:  資料庫預設級別

2、isolocation_read_uncommitted: 允許讀取未提交的讀, 可能導致髒讀,不可重複讀,幻讀

3、isolocation_read_committed:  允許讀取已提交的讀,可能導致不可重複讀,幻讀

4、isolocation_repeatable_read : 不能能更新另乙個事務修改單尚未提交(回滾)的資料,可能引起幻讀

5、isolocation_serializable: 序列執行效率低

spring傳播級別:

1、propergation_mandatory: 方法必須執行在乙個事務中,不存在事務則丟擲異常

2、propergation_nested:  存在事務則執行在巢狀事務中,不存在則建立乙個事務

3、propergation_never: 當前方法不能執行在事務中,存在事務則丟擲異常

4、propergation_not_support: 當前存在事務則將其 掛起

5、propergation_required: 不存在事務則建立乙個事務

6、propergation_requires_new:  新建乙個自己的事務,不論當前是否存在事務

7、propergation_support: 存在事務則加入,不存在也可以

Spring的事務傳播屬性和資料庫隔離級別

spring的7個事務傳播屬性 required 業務方法需要在乙個事務中執行。如果方法執行時,已經處在乙個事務中,那麼假如到該事務,否則為自己建立乙個新的事物 not supported 宣告方法不需要事務。如果方法沒有關聯到乙個事務,容器不會為它開啟事務。如果方法在乙個事務中被呼叫,該事務會被掛...

資料庫與spring事務隔離級別

髒讀 乙個事務讀取到另乙個事務未提交的資料,出現髒讀的本質是是因為操作 修改 完資料就立馬釋放掉鎖,導致其他事務可以讀取資料,而讀取的資料是無用的或者錯誤的。不可重複讀 乙個事務讀取到另外乙個事務已經提交的資料,即乙個事務可以看到其他事務所做的修改。幻讀 虛讀 乙個事務內讀取到了別的事務插入的資料,...

資料庫事務及隔離級別

1資料庫四大特性 資料庫具有事務安全性,同時也具有acid四大特性 原子性 一致性 隔離性 永續性 原子性 atomicity 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能...