mysql四大特性四個隔離級別七種事務傳播

2021-10-10 01:25:13 字數 2395 閱讀 7132

如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性

1、原子性(atomicity)

原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。

2、一致性(consistency)

事務開始前和結束後,資料庫的完整性約束沒有被破壞 。(簡單來說,兩個賬戶一共有500元,任憑他們怎麼相互轉錢,500元是他們賬戶餘額的總和)。

3、隔離性(isolation)

同一時間,只允許乙個事務請求同一組資料。不同的事務彼此之間沒有干擾。

4、永續性(durability)

事務完成後,事務對資料庫的所有更新將被儲存到資料庫,不能回滾(即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作)。

1:read uncommitted事務a對資料進行修改,但未提交。此時開啟事務b,在事務b中能讀到事務a中對資料庫進行的未提交資料的修改。(這種方式也稱為髒讀)

2 :read committed事務a對資料進行修改,但還未提交。此時開啟事務b,在事務b中不能讀到事務a中對資料庫的修改。在事務b還沒有關閉時,此時事務a提交對資料庫的修改。這時候,我們在事務b中,可以查到事務a中對資料庫的修改。這時存在乙個問題,我們在同乙個事務中,對資料庫查詢兩次,但兩次的結果是不一樣的。(這種方式稱為不可重複讀。)

3 :repetition read事務a對資料進行修改,但未提交,此時開啟事務b,在事務b中不能讀到事務a對資料庫的修改。在事務a提交對資料庫修改時,此時在事務b中,仍不能讀到事務a對資料庫的修改。(這種方式稱為可重複讀)但此時有乙個弊端,比如我們在事務a中對資料庫增加一條資料,id 為 n ,這時候我們在事務b中查詢資料,此時查不到id為n的資料。但當我們在事務b中增加id為n的資料時,系統會提示id為n的資料已經存在,我們新增失敗。但此時此刻,我們在事務b中仍不能查詢到id為n的資料。這種方式存在乙個幻讀的概念。舉個例子,(系統管理員a將資料庫中所有學生的成績從具體分數改為abcde等級,但是系統管理員b就在這個時候插入了一條具體分數的記錄,當系統管理員a改結束後關閉事務發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。)

4 :serializable在開啟事務a時,會產生鎖表,此時別的事務會等待,等事務a結束時才會開啟。這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題

① serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。

② repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。

③ read committed (讀已提交):可避免髒讀的發生。

④ read uncommitted (讀未提交):最低級別,任何情況都無法保證。

注意:表上方「可能」兩個字!!!

transactiondefinition.propagation_required

如果當前存在事務,則加入該事務;如果當前沒有事務,則建立乙個新的事務。這是預設值。

transactiondefinition.propagation_requires_new

建立乙個新的事務,如果當前存在事務,則把當前事務掛起。

transactiondefinition.propagation_supports

如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。

transactiondefinition.propagation_not_supported

以非事務方式執行,如果當前存在事務,則把當前事務掛起。

transactiondefinition.propagation_never

以非事務方式執行,如果當前存在事務,則丟擲異常。

transactiondefinition.propagation_mandatory

如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。

transactiondefinition.propagation_nested

如果當前存在事務,則建立乙個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於transactiondefinition.propagation_required。

MySQL事務四大特性與隔離級別

1 原子性 是指乙個方法裡的操作要同時成功或者同時失敗。2 一致性 事務前後資料的完整性必須保持一致。3 隔離性 要保證資料之間不能相互影響,有四種隔離等級。4 永續性 指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。一致性 簡單打個比方,比...

mysql引擎,事務 (隔離級別,四大特性)

讀未提交,顧名思義,就是乙個事務可以讀取另乙個未提交事務的資料。讀已提交,顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料。可重複讀,就是在開始讀取資料 事務開啟 時,不再允許修改操作 可序列化是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀 不可重複讀與幻讀。但是這種事務隔...

Mysql 四大特性與四種隔離級別

四大特性 1 原子性。事務是乙個不可分割的整體,事務開始的操作,要麼全部執行,要麼全部不執行。2 隔離性。同一時間,只允許乙個事務請求同一組資料。不同的事務彼此之間沒有干擾。3 一致性。事務開始前和結束後,資料庫的完整性約束沒有被破壞 4 穩定性。事務完成後,事務對資料庫的所有更新將被儲存到資料庫,...