mysql事務隔離級別及傳播機制

2021-09-08 05:31:10 字數 3177 閱讀 1812

transaction(事務隔離級別)

在說明事務隔離級別之前先說一下髒讀、不可重複讀、幻讀這三個概念。

髒讀:乙個事務讀取到另一事務未提交的更新新據。當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有

提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料, 那麼另

外乙個事務讀到的這個資料是髒資料,依據髒資料所做的操作也可能是不正確的。

不可重複讀:在同一事務中,多次讀取同一資料返回的結果有所不同。換句話說就是,後續讀取可以讀到另一事務已提交的

更新資料。相反,「可重複讀」在同一事務中多次讀取資料時,能夠保證所讀資料一樣,也就是,後續讀取不能讀到另一事務

已提交的更新資料。

幻讀:事務t1執行一次查詢,然後事務t2新插入一行記錄,這行記錄恰好可以滿足t1所使用的查詢的條件。然後t1又使用相同

的查詢再次對錶進行檢索,但是此時卻看到了事務t2剛才插入的新行。這個新行就稱為「幻像」,因為對t1來說這一行就像突然

出現的一樣。

1. isolation_default:這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。

每種資料庫的預設隔離級別是不同的,例如sql server、oracle預設read commited,mysql預設repeatable read。

另外四個與jdbc的隔離級別相對應,不同的隔離級別採用不同的鎖型別來實現,在四種隔離級別中,serializable的

隔離級別最高,read uncommited的隔離級別最低。

2. isolation_read_uncommitted:讀未提交資料,這是事務最低的隔離級別,在併發的事務中,它充許乙個事務可以

讀到另乙個事務未提交的更新資料。(會出現髒讀,不可重複讀和幻讀)

3. isolation_read_committed:讀已提交資料,保證在併發的事務中,乙個事務修改的資料提交後才能被另外乙個事

務讀取到。(會出現不可重複讀和幻讀)

4. isolation_repeatable_read:可重複讀,這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻讀。一般

是採用「快照」的方式來實現的。

5. isolation_serializable:事務被處理為順序執行。這是花費最高,但也是最可靠的事務隔離級別。能有效的避免髒讀、

不可重複讀、幻讀。

propagation(事務傳播屬性)

propagation_required:支援當前事務,如果當前沒有事務,就新建乙個事務。也就是說業務方法需要在乙個事務中執行,如果

業務方法被呼叫時,呼叫業務方法的行為(方法)已經處在乙個事務中,那麼就加入到該事務,否則為自己建立乙個新的事務。

(預設傳播屬性)

propagation_supports:支援當前事務,如果當前沒有事務,就以非事務方式執行。也就是說如果業務方法在某個事務範圍內被呼叫,

則該方法成為該事務的一部分。如果業務方法在事務範圍外被呼叫,則該方法在沒有事務的環境下執行。

propagation_mandatory:支援當前事務,如果當前沒有事務,就丟擲異常。也就是說業務方法只能在乙個已經存在的事務中執行,

業務方法不能發起自己的事務。如果業務方法在沒有事務的環境下被呼叫,容器就會丟擲例外。

propagation_requiresnew:新建事務,如果當前存在事務,把當前事務掛起。也就是說業務方法被呼叫時,不管是否已經存在事務,

業務方法總會為自己發起乙個新的事務。如果呼叫業務方法的行為(方法)已經執行在乙個事務中,則原有事務會被掛起,新的事務

會被建立,直到業務方法執行結束,新事務才算結束,原先的事務才會恢復執行。

propagation_not_supported:以非事務方式執行,如果當前存在事務,就把當前事務掛起。也就是說業務方法不需要事務。如果

方法沒有被關聯到乙個事務中,容器不會為它開啟事務。如果方法在乙個事務中被呼叫,該事務會被掛起,在方法呼叫結束後,

原先的事務便會恢復執行。

propagation_never:以非事務方式執行,如果當前存在事務,則丟擲異常。也就是說業務方法絕對不能在事務範圍內執行。如果業務

方法在某個事務中執行,容器會丟擲例外,只有業務方法沒有關聯到任何事務,才能正常執行。

propagation_nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中。 如果沒有活動事務, 則按required屬性執行。

它使用了乙個單獨的事務, 這個事務擁有多個可以回滾的儲存點。內部事務的回滾不會對外部事務造成影響。它只對

datasourcetransactionmanager事務管理器起效。

資料庫事務的4個特性:

原子性(atomic):組成乙個事務的多個資料庫操作是乙個不可分割的原子單元;只有所有操作執行成功,整個事務才提交,

其中乙個操作失敗,都必須回滾到初始狀態。

一致性(consistency):事務操作成功後資料庫所處的狀態和它的業務規則是一致的;(即資料總額不會被破壞。

如a賬戶轉賬100到b賬戶,無論操作成功與否,a和b的存款總額是不變的)

隔離性(isolation):在併發資料操作時,不同的事務擁有各自的資料空間,它們的操作不會對彼此產生干擾。(並非是完全無干擾,

根據資料庫的隔離級別,會產生不同程度的干擾)

永續性(durability):一旦事務提交成功,事務中的資料操作都必須持久化到資料庫中;就算資料庫崩潰,也必須保證有某種機制恢復。

在這些特性中,資料「一致性」是最終目標,其他的特性都是為了達到這個目標的措施和手段。

mysql檢視當前事務隔離級別

MySQL事務及事務隔離級別

原子性 atomicity 事務是乙個原子操作單元,其對資料的修改,要麼全都執行,要麼全都不執行。一致性 consistent 在事務開始和完成時,資料都必須保持一致狀態。這意味著所有相關的資料規則都必須應用於事務的修改,以保持資料的完整性 事務結束時,所有的內部資料結構 如b樹索引或雙向鍊錶 也都...

mysql 事務及隔離級別

原子性 回滾日誌 undo log 永續性 重做日誌 redo log 隔離性 鎖 一致性 通過aid及使用者自定義完整性保證 一致性是事務追求的最終目標 前面提到的原子性 永續性和隔離性,都是為了保證資料庫狀態的一致性。此外,除了資料庫層面的保障,一致性的實現也需要應用層面進行保障。一致性是指事務...

mysql 事務及隔離級別

事務 transaction 是由一系列對資料庫中的資料進行操作訪問所組成的乙個程式執行單元 在同乙個事務中所進行的操作,要麼都成功,要麼就什麼都不做。理想中的事務必須滿足四大特性,這就是大名鼎鼎的acid。a atomicity 原子性 是指乙個事務要麼全部執行,要麼不執行,也就是說乙個事務不可能...