如上图所示, 两张图, 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值也会变? 应该是有时限的吧?
貌似是连接断开, 会自动回滚, 那么我们写代码正常都是有连接池的, 这个会不会造成什么不好的影响呢
在事务中,普通的
SELECT
语句(非SELECT ... FOR UPDATE
,SELECT ... FOR SHARE
)是 nonlocking read,mysql 的官方在Consistent Nonlocking Reads
的文档中有一句话:也就是说,在同一个事务中,查询语句是能洞察到之前的 DML 对某一行的修改的。