如何理解 MySQL 事務(wù)中的不可重復(fù)讀和幻讀問題?
問題描述
如何理解 MySQL 事務(wù)中的不可重復(fù)讀和幻讀問題? 或者說 READ COMMIT 和 REPEAT COMMIT 兩種隔離性的區(qū)別在哪?
問題解答
回答1:剛好學習一下這個,我就粗淺的來說說我的想法:Read Committed(不可重復(fù)讀):假設(shè)事務(wù)1讀取了一條記錄(select user_name from user where user_id = 1),得到user_name = ’456’,事務(wù)1暫時沒提交。事務(wù)2更新了一條記錄(update user set user_name = ’123’ where user_id = 1),事務(wù)2提交。此時事務(wù)1再次select user_name from user where user_id = 1得到了user_name = ’123’,這樣就導(dǎo)致事務(wù)1在讀取同一行數(shù)據(jù)卻得到不同的user_name。這就是所謂的不可以重復(fù)讀
Repeatable Read(可重復(fù)讀,會產(chǎn)生幻讀):這個跟不可重復(fù)讀相反,當事務(wù)1查詢到user_name=’456’時,事務(wù)2將user_name更新成’123’并提交,事務(wù)1再次查詢還是會發(fā)現(xiàn)user_name=’456’,這樣保證了可重復(fù)讀。幻讀的話就是當事務(wù)2插入一條新的數(shù)據(jù)id為2并提交,事務(wù)1由于可重復(fù)讀的性質(zhì),只能在表中查到id為1的數(shù)據(jù),如果此時事務(wù)1插入id為2的數(shù)據(jù)則會產(chǎn)生錯誤,因為此時表中已經(jīng)有了id為2的數(shù)據(jù),但是事務(wù)1只看到了id為1的數(shù)據(jù)。
相關(guān)文章:
1. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. css - 寫頁面遇到個布局問題,求大佬們幫解答,在線等,急!~4. javascript - nodejs關(guān)于進程間發(fā)送句柄的一點疑問5. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?6. 實現(xiàn)bing搜索工具urlAPI提交7. 配置Apache時,添加對PHP的支持時語法錯誤8. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化9. javascript - 移動端上不能實現(xiàn)拖拽布局嗎?10. phpstudy8.1支持win11系統(tǒng)嗎?

網(wǎng)公網(wǎng)安備