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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么要避免不可重复读_脏读、幻读和不可重复读?为啥?

發布時間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么要避免不可重复读_脏读、幻读和不可重复读?为啥? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

  • 一致性是指在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。這是說數據庫事務不能破壞關系數據的完整性以及業務邏輯上的一致性。
  • 例子: 對銀行轉帳事務,不管事務成功還是失敗,應該保證事務結束后ACCOUNT表中A和B的存款總額為x元不變。

Isolation 隔離性:

  • 數據庫允許多個并發事務同事對數據進行操作,隔離性保證各個事務相互獨立,事務處理時的中間狀態對其它事務是不可見的,以此防止出現數據不一致狀態。
  • 例子: 在Windows中,如果多個進程對同一個文件進行修改是不允許的,Windows通過這種方式來保證不同進程的隔離性。

Durable 持久性:

  • 一個事務處理結束后,其對數據庫的修改就是永久性的,即使系統故障也不會丟失。

臟讀、幻讀和不可重復讀的概念

臟讀:

所謂臟讀是指一個事務中訪問到了另外一個事務未提交的數據,如下圖:

如果會話 2 更新 age 為 10,但是在 commit 之前,會話 1 希望得到 age,那么會獲得的值就是更新前的值。或者如果會話 2 更新了值但是執行了 rollback,而會話 1 拿到的仍是 10。這就是臟讀。

不可重復讀:

一個事務查詢同一條記錄2次,得到的結果不一致:

由于在讀取中間變更了數據,所以會話 1 事務查詢期間的得到的結果就不一樣了。

幻讀:

一個事務查詢2次,得到的記錄條數不一致:

幻讀是不可重復讀的一種特殊場景。

MySQL 數據隔離級別

MySQL 里有四個隔離級別:

  • Read uncommttied(可以讀取未提交數據)
  • Read committed(可以讀取已提交數據)
  • Repeatable read(可重復讀)
  • Serializable(可串行化)。
  • 不同事務隔離級別有不同的效果:

    在 InnoDB 中,默認為 Repeatable 級別,InnoDB 中使用一種被稱為 next-key locking 的策略來避免幻讀(phantom)現象的產生。

    隔離級別越高,越能保證數據的完整性和一致性,但是對并發性能的影響也越大。

    獲取資料:

    本次給大家分享一些學習資料,里面包括:(高可用、高并發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)以及Java進階學習路線圖。

    關注作者,私信關鍵詞:(資料) 即可。

    最后,祝大家早日學有所成!

    總結

    以上是生活随笔為你收集整理的为什么要避免不可重复读_脏读、幻读和不可重复读?为啥?的全部內容,希望文章能夠幫你解決所遇到的問題。

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