有了前面的補(bǔ)充,我們看下是否能解釋前面step7出現(xiàn)的問題
- 我們?cè)赥2的step8修改了id=1的title,但step 9,step10沒有看到,step9沒看到,大家不會(huì)有什么意外,因?yàn)閟tep9對(duì)應(yīng)的事務(wù)ID小于step8的事務(wù)ID,但step10的事務(wù)ID是大于step8的事務(wù)ID的,那么我們來(lái)分析一下是什么造成的,我們這里不說(shuō)undo log的格式,我們只需要知道根據(jù)undo log我們可以知道記錄的多個(gè)版本
- 一開始,id=1的記錄是這樣的
- T1的step4
- m_up_limit_id=1,m_low_limit_id=1,m_createor_trx_id=1,trx_ids={},DATA_TRX_ID=0
- DATA_TRX_ID<m_up_limit_id, 在[m_up_limit_id,m_low_limit_id]的左側(cè),記錄可見
- T2的step 5
- m_up_limit_id=1,m_low_limit_id=2,m_createor_trx_id=2,trx_ids={1},DATA_TRX_ID=0
- DATA_TRX_ID<m_up_limit_id, 在[m_up_limit_id,m_low_limit_id]的左側(cè),記錄可見
- T3的step 6
- m_up_limit_id=1,m_low_limit_id=3,m_createor_trx_id=3,trx_ids={1,2},DATA_TRX_ID=0
- DATA_TRX_ID<m_up_limit_id, 在[m_up_limit_id,m_low_limit_id]的左側(cè),記錄可見
- step7修改了數(shù)據(jù),這時(shí)候id=1的記錄是這樣的
- T2的step8
*m_up_limit_id=1,m_low_limit_id=2,m_createor_trx_id=2,trx_ids={1},DATA_TRX_ID=2- DATA_TRX_ID在[m_up_limit_id,m_low_limit_id]的中間位置,m_createor_trx_id=DATE_TRX_ID,因此可見。所以看到了title=‘商品1 push’的這一行
- T1的step9
- m_up_limit_id=1,m_low_limit_id=1,m_createor_trx_id=1,trx_ids={},DATA_TRX_ID=2
- DATA_TRX_ID在[m_up_limit_id,m_low_limit_id]的右側(cè),記錄不可見
- 那么接著通過DATE_ROLL_PTR,去undo找到了trx_id=0的這一行
- DATA_TRX_ID=0,DATA_TRX_ID<m_up_limit_id, 在[m_up_limit_id,m_low_limit_id]的左側(cè),記錄可見
- step10
- m_up_limit_id=1,m_low_limit_id=3,m_createor_trx_id=3,trx_ids={1,2},DATA_TRX_ID=2
- DATA_TRX_ID在[m_up_limit_id,m_low_limit_id]的中間位置,并且在trx_ids中,記錄不可見
- 接著通過DATE_ROLL_PTR,去undo找到了trx_id=0的這一行
- DATA_TRX_ID=0, DATA_TRX_ID=0,DATA_TRX_ID<m_up_limit_id, 在[m_up_limit_id,m_low_limit_id]的左側(cè),記錄可見
關(guān)于MVCC詳細(xì)講解就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的參考價(jià)值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。