問題:
在 MySQL 中事務(wù)隔離級別為可重復(fù)讀時,當(dāng)事務(wù) A 更新一條數(shù)據(jù)后,其他事務(wù) B 為什么依然可以通過 Select 查詢到更新后的數(shù)據(jù)?按照 MVCC 機(jī)制,B 事務(wù)不應(yīng)該只能看到數(shù)據(jù)的快照狀態(tài)嗎?
答案:
MVCC 的匹配規(guī)則并非僅有一條,而是有三條:
- 事務(wù) ID 大于等于 row的m_low_limit_id 和小于等于 row 的 m_up_limit_id 的事務(wù)可以讀取該行。
- 事務(wù) ID 小于 row 的 m_low_limit_id 的事務(wù)可以讀取該行。
- 事務(wù) ID 大于 row 的 m_up_limit_id 的事務(wù)可以讀取該行。
題中提到的場景符合第一條匹配規(guī)則,即事務(wù) A 的 ID 大于 row(ID 為 5)的 m_low_limit_id(事務(wù) B 的 ID 加 1)并且小于等于 row 的 m_up_limit_id(事務(wù) A 的 ID)。因此,即使事務(wù) B 對 row 執(zhí)行了更新操作,事務(wù) A 依然可以通過 Select 查詢到更新后的數(shù)據(jù),而無需等待事務(wù) B 提交。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END