mysql事务中, select跟列表的内容不一样
如上图所示, 两张图, 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在事务中,普通的
SELECT
语句(非SELECT ... FOR UPDATE
,SELECT ... FOR SHARE
)是 nonlocking read,mysql 的官方在Consistent Nonlocking Reads
的文档中有一句话:也就是说,在同一个事务中,查询语句是能洞察到之前的 DML 对某一行的修改的。