亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

一致性問題


老師你好。

你這里關于一致性的定義是"能保證看到系統內的所有更改"

假設我們有兩個事務:

事務A是一個讀事務:

begin transaction

select * from table1 where id = 1;

commit;

事務B是一個寫事務:

begin transaction

update table1 set name=newName where id = 1;

commit;


A事務先開始,B事務后執行。如圖中所示,在事務A執行過程中事務B已經commit。

http://img1.sycdn.imooc.com//5a6e959300010b7a08060459.jpg

那么對于事務A而言在mvcc(mysql innodb)機制下能看到事務B更改的數據嗎。

正在回答

1 回答

if (在事務A執行過程中事務B已經commit){
????如果你可以確定? 那么是一定可以讀出來的?

}else if(但是基本是我們不能確定事務A執行過程中事務B是否commit){? ?

????if(如果mvcc設置的read commit?){

? ? 你說了?A事務先開始,B事務后執行 因為U鎖的原因? 兩個事件是并行的.

????讀提交時,讀事務每次都讀取undo log中最近的版本,因此兩次對同一字段的讀可能讀到不同的數據(不可重復讀),但能保證每次都讀到最新的數據。

??????所以可以讀出來? 即用log實現視點2(雖然還沒Commit)

????}else if(如果mvcc設置的Repeatable read ){

? ??????每次都讀取指定的版本,這樣保證不會產生不可重復讀,但讀不到最新的數據

????????所以可以讀不出來? 即視點1

????}

}

當然這一切都是假定在txA和txB同時進行的前提下?

?

????



0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
在線分布式數據庫原理與實踐
  • 參與學習       42346    人
  • 解答問題       54    個

一起學習事務與分布式事務原理與實踐干貨,歡迎收藏

進入課程

一致性問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號