成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何理解 MySQL 事務(wù)中的不可重復(fù)讀和幻讀問(wèn)題?

瀏覽:141日期:2022-06-20 14:25:22

問(wèn)題描述

如何理解 MySQL 事務(wù)中的不可重復(fù)讀和幻讀問(wèn)題? 或者說(shuō) READ COMMIT 和 REPEAT COMMIT 兩種隔離性的區(qū)別在哪?

問(wèn)題解答

回答1:

剛好學(xué)習(xí)一下這個(gè),我就粗淺的來(lái)說(shuō)說(shuō)我的想法:Read Committed(不可重復(fù)讀):假設(shè)事務(wù)1讀取了一條記錄(select user_name from user where user_id = 1),得到user_name = ’456’,事務(wù)1暫時(shí)沒(méi)提交。事務(wù)2更新了一條記錄(update user set user_name = ’123’ where user_id = 1),事務(wù)2提交。此時(shí)事務(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ù)讀,會(huì)產(chǎn)生幻讀):這個(gè)跟不可重復(fù)讀相反,當(dāng)事務(wù)1查詢到user_name=’456’時(shí),事務(wù)2將user_name更新成’123’并提交,事務(wù)1再次查詢還是會(huì)發(fā)現(xiàn)user_name=’456’,這樣保證了可重復(fù)讀。幻讀的話就是當(dāng)事務(wù)2插入一條新的數(shù)據(jù)id為2并提交,事務(wù)1由于可重復(fù)讀的性質(zhì),只能在表中查到id為1的數(shù)據(jù),如果此時(shí)事務(wù)1插入id為2的數(shù)據(jù)則會(huì)產(chǎn)生錯(cuò)誤,因?yàn)榇藭r(shí)表中已經(jīng)有了id為2的數(shù)據(jù),但是事務(wù)1只看到了id為1的數(shù)據(jù)。

相關(guān)文章: