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


一:事務傳播機制一共7種,可分爲兩類。
這裏寫圖片描述

  • 1.需要事務
    1.1-EREQUIRED(默認值):如果沒有事務,就打開一個事務。如果事務已經打開,則共用這個事務
    1.2-MANDATORY:如果沒有事務,不會打開新的事務,會報異常。如果事務已經打開,則共用這個事務
    1.3-REQUIRES_NEW:如果沒有事務,就打開一個事務。如果事務已經打開,則將正在運行的事務掛起,該事務先執行(優先級高於已經打開的事務)。
    1.4-NESTED:涉及嵌套事務。如下圖,如果事務B中propagation=EREQUIRED/MANDATORY,則共用事務;如果propagation=REQUIRES_NEW,則事務B先執行。嵌套事務慎用,和數據庫事務處理機制有關。
    這裏寫圖片描述
  • 2.不需要事務
    2.1- SUPPORTS’沒有事務,不會打開事務,照常執行。有事務打開,就跟事務一起,照常執行。
    2.2-NEVER:不要事務,有事務打開就報錯。
    2.3-NOT_SUPPORTED:不需要事務,但是如果有事務打開,則將該事務掛機,先執行自己(優先級高)。

  • 二:事務隔離級別:下面是5中事務隔離級別這裏寫圖片描述

1—DEFAULT(默認值):每個數據庫的默認值不一樣oracle/sqlsever:READ_COMMITTED;mysql:REPEATABLE_READ。
2—READ_UNCOMMITTED:未提交讀。查詢速度快,可能會有髒數據。使用於數據完整性不是很嚴格的場合。
3—READ_COMMITTED:提交讀。隔離級別最低要求,可避免髒讀的發生。可能出現不可重複讀,幻讀。
4—REPEATABLE_READ:可重複讀。可避免髒讀、不可重複讀的發生,可能出現幻讀。
5.SERIALIZABLE:串行讀。安全,速度慢。可避免髒讀、不可重複讀、幻讀的發生。


髒讀:是指在一個事務處理過程裏讀取了另一個未提交的事務中的數據
不可重複讀:是指在對於數據庫中的某個數據,一個事務範圍內多次查詢卻返回了不同的數據值,這是由於在查詢間隔,被另一個事務修改並提交了。
幻讀:和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同一個數據項,而幻讀針對的是一批數據整體(比如數據的個數)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章