MySQL 可重復(fù)讀隔離級別下,事務(wù)更新數(shù)據(jù)后其他事務(wù)為何能立刻看到?

MySQL 可重復(fù)讀隔離級別下,事務(wù)更新數(shù)據(jù)后其他事務(wù)為何能立刻看到?

mysql 更新后 select 為什么可以立即看到

問題:

在 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ī)則并非僅有一條,而是有三條:

  1. 事務(wù) ID 大于等于 rowm_low_limit_id 和小于等于 row 的 m_up_limit_id 的事務(wù)可以讀取該行。
  2. 事務(wù) ID 小于 row 的 m_low_limit_id 的事務(wù)可以讀取該行。
  3. 事務(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)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享