mysql中mvcc控制可重复读的问题

发布于 2022-09-11 23:40:28 字数 753 浏览 20 评论 0

mysql的innodb的rr级别

事务A事务B
start transaction
select * from user
start transaction
select * from user where id =1
update user set name ="222" where id =1
select * from user where id =1

按照mvcc的说法,事务b的id要大于事务A的id,那么事务B应该就可以读取到事务A的修改,事务b的两次select就应该不同。请问这样如何结果不可重复读的问题

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小嗷兮 2022-09-18 23:40:28

假设事务Aid为100,事务Bid为101。事务B生成read-view[100,101]。然后就算事务A update了数据并提交,由于事务A的id在事务B的readview中,也读取不到。

醉殇 2022-09-18 23:40:28

InnoDB的RR隔离级别下,事务读取的都是行数据的快照,是通过undo log实现的。事务B读取的行数据为B开始的那一刻的Version版本,所以读取的数据是一致的。与之对应的RC隔离级别下,事务读取的是最近的快照,如果事务A修改了两次,会产生不可重复读的问题、

青衫儰鉨ミ守葔 2022-09-18 23:40:28

如果 Innodb 的事务隔离级别是 RR,那么事务 B 中所读取到的 id 为 1 的记录是不会变的。因为事务 B 在执行第一次查询的时候,事务 A 并没有 COMMIT,所以 snapshot 是 update 之前的记录。可以看一下官方文档RR 的说明。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文