日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库事物相关笔记

發布時間:2023/12/10 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库事物相关笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、數據庫的事物的基本特性

事物是區分文件存儲系統與Nosql數據庫重要特性之一,其存在的意義是為了保證即使在并發情況下也能正確的執行crud操作。怎樣才算是正確的呢?這時提出了事物需要保證的四個特性即ACID:

  • A: 原子性(atomicity)
    • 事物中各項操作,要么全做要么全不做,任何一項操作的失敗都會導致整個事物的失敗;
  • C: 一致性(consistency)
    • 事物結束后系統狀態是一致的;
  • I:? 隔離性(isolation)
    • 并發執行的事物彼此無法看到對方的中間狀態;
  • D: 持久性(durability)
    • 事物完成后所做的改動都會被持久化,即使發生災難性的失敗。
  • 在高并發的情況下,要完全保證其ACID特性是非常困難的,除非把所有的事物串行化執行,但帶來的負面的影響將是性能大打折扣。很多時候我們有些業務對事物的要求是不一樣的,所以數據庫中設計了四種隔離級別,供用戶基于業務進行選擇。

    二、數據庫的事物的隔離級別

    隔離級別

    臟讀(Dirty Read)

    不可重復讀(NonRepeatable Read)

    幻讀(Phantom Read)

    未提交讀(Read uncommitted)

    可能

    可能

    可能

    已提交讀(Read committed)

    不可能

    可能

    可能

    可重復讀(Repeatable read)

    不可能

    不可能

    可能

    可串行化(SERIALIZABLE)

    不可能

    不可能

    不可能

    ?

    臟讀 :

    一個事物讀取到另一事物未提交的更新數據

    不可重復讀 :

    在同一事物中,多次讀取同一數據返回的結果有所不同, 換句話說, 后續讀取可以讀到另一事物已提交的更新數據. 相反, “可重復讀”在同一事物中多次讀取數據時, 能夠保證所讀數據一樣, 也就是后續讀取不能讀到另一事物已提交的更新數據。

    幻讀 :

    ?查詢表中一條數據如果不存在就插入一條,并發的時候卻發現,里面居然有兩條相同的數據。這就幻讀的問題。

    ?

    數據庫默認隔離級別:

    Oracle中默認級別是 Read committed

    mysql 中默認級別 Repeatable read。另外要注意的是mysql 執行一條查詢語句默認是一個獨立的事物,所以看上去效果跟Read committed一樣。

    # 查看mysql 的默認隔離級別

    SELECT @@tx_isolation

    ?

    三、事物的傳播機制

    ?

    ?

    類別

    事物傳播類型

    說明

    支持當前事物

    PROPAGATION_REQUIRED

    (必須的)

    如果當前沒有事物,就新建一個事物,如果已經存在一個事物中,加入到這個事物中。這是最常見的選擇。

    PROPAGATION_SUPPORTS

    (支持)

    支持當前事物,如果當前沒有事物,就以非事物方式執行。

    PROPAGATION_MANDATORY

    (強制)

    使用當前的事物,如果當前沒有事物,就拋出異常。

    不支持當前事物

    PROPAGATION_REQUIRES_NEW

    (隔離)

    新建事物,如果當前存在事物,把當前事物掛起。

    PROPAGATION_NOT_SUPPORTED

    (不支持)

    以非事物方式執行操作,如果當前存在事物,就把當前事物掛起。

    PROPAGATION_NEVER

    (強制非事物)

    以非事物方式執行,如果當前存在事物,則拋出異常。

    套事物

    PROPAGATION_NESTED

    (嵌套事物)

    如果當前存在事物,則在嵌套事物內執行。如果當前沒有事物,則執行與PROPAGATION_REQUIRED類似的操作。

    常用事物傳播機制:

  • PROPAGATION_REQUIRED,
    • 這個也是默認的傳播機制;
  • PROPAGATION_NOT_SUPPORTED
    • 可以用于發送提示消息,站內信、短信、郵件提示等。不屬于并且不應當影響主體業務邏輯,即使發送失敗也不應該對主體業務邏輯回滾。
  • PROPAGATION_REQUIRES_NEW
    • 總是新啟一個事物,這個傳播機制適用于不受父方法事物影響的操作,比如某些業務場景下需要記錄業務日志,用于異步反查,那么不管主體業務邏輯是否完成,日志都需要記錄下來,不能因為主體業務邏輯報錯而丟失日志;
  • 總結

    以上是生活随笔為你收集整理的数据库事物相关笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。