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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

当前读与快照读

發(fā)布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 当前读与快照读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概念

快照讀

??讀取的是記錄數(shù)據(jù)的可見版本(可能是過期的數(shù)據(jù)),不用加鎖

當前讀

??讀取的是記錄數(shù)據(jù)的最新版本,并且當前讀返回的記錄都會加上鎖,保證其他事務不會再并發(fā)的修改這條記錄
??概念說的比較虛,也不好理解,接著舉一個例子吧,假設你開啟了兩個事務,分別是A和B,這里有個張表,user表,里面有四條數(shù)據(jù)


x表示是排它鎖(Exclusive),s表示共享鎖(Share), image.png

1、select快照讀(照片)

??當你執(zhí)行select *之后,在A與B事務中都會返回4條一樣的數(shù)據(jù),這是不用想的,當執(zhí)行select的時候,innodb默認會執(zhí)行快照讀,相當于就是給你目前的狀態(tài)找了一張照片,以后執(zhí)行select 的時候就會返回當前照片里面的數(shù)據(jù),當其他事務提交了也對你不造成影響,和你沒關系,這就實現(xiàn)了可重復讀了,那這個照片是什么時候生成的呢?不是開啟事務的時候,是當你第一次執(zhí)行select的時候,也就是說,當A開啟了事務,然后沒有執(zhí)行任何操作,這時候B insert了一條數(shù)據(jù)然后commit,這時候A執(zhí)行 select,那么返回的數(shù)據(jù)中就會有B添加的那條數(shù)據(jù)......之后無論再有其他事務commit都沒有關系,因為照片已經(jīng)生成了,而且不會再生成了,以后都會參考這張照片。

2、update、insert、delete 當前讀

??當你執(zhí)行這幾個操作的時候默認會執(zhí)行當前讀,也就是會讀取最新的記錄,也就是別的事務提交的數(shù)據(jù)你也可以看到,這樣很好理解啊,假設你要update一個記錄,另一個事務已經(jīng)delete這條數(shù)據(jù)并且commit了,這樣不是會產(chǎn)生沖突嗎,所以你update的時候肯定要知道最新的信息啊。

??我在這里介紹一下update的過程吧,首先會執(zhí)行當前讀,然后把返回的數(shù)據(jù)加鎖,之后執(zhí)行update。加鎖是防止別的事務在這個時候?qū)@條記錄做什么,默認加的是排他鎖,也就是你讀都不可以,這樣就可以保證數(shù)據(jù)不會出錯了。但注意一點,就算你這里加了寫鎖,別的事務也還是能訪問的,是不是很奇怪?數(shù)據(jù)庫采取了一致性非鎖定讀,別的事務會去讀取一個快照數(shù)據(jù)。
??innodb默認隔離級別是RR, 是通過MVVC來實現(xiàn)了,讀方式有兩種,執(zhí)行select的時候是快照讀,其余是當前讀,所以,mvvc不能根本上解決幻讀的情況




鏈接:https://www.jianshu.com/p/27352449bcc0

轉載于:https://www.cnblogs.com/twoheads/p/10703836.html

總結

以上是生活随笔為你收集整理的当前读与快照读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。