mysql事务中, select跟列表的内容不一样

发布于 2022-09-11 23:48:52 字数 588 浏览 17 评论 0

屏幕快照 2019-11-26 上午10.54.56.png

屏幕快照 2019-11-26 上午10.55.01.png

如上图所示, 两张图, id=4的一个开始金额是3,
然后我执行了
begin;
update account set money=4 where id=4;

我再刷新account表内容,还是3, 这可以理解, 因为还没有commit

但是我直接select * from account;执行这个sql的时候, 发现id=4的金额 已经变成4了, 这是为什么呢, 两种情况不一样

刚试了下, 我重新起了个窗口, select执行结果是3, 那这是说明, 是sql的链接问题了? 有事务的那个连接, 就算没有commit值也会变? 应该是有时限的吧?

貌似是连接断开, 会自动回滚, 那么我们写代码正常都是有连接池的, 这个会不会造成什么不好的影响呢

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

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

发布评论

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

评论(1

乖不如嘢 2022-09-18 23:48:52

在事务中,普通的 SELECT 语句(非 SELECT ... FOR UPDATE , SELECT ... FOR SHARE)是 nonlocking read,mysql 的官方在 Consistent Nonlocking Reads文档中有一句话:

The exception to this rule is that the query sees the changes made by earlier statements within the same transaction.

也就是说,在同一个事务中,查询语句是能洞察到之前的 DML 对某一行的修改的。

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