首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -在特定列上执行SELECT命令是否会导致事务中的本地快照?

MySQL -在特定列上执行SELECT命令是否会导致事务中的本地快照?
EN

Stack Overflow用户
提问于 2016-05-02 01:34:04
回答 1查看 186关注 0票数 0

向大家问好,

最近,我尝试了下面发布的方案,我希望您对此有意见。使用MySQL/INNODB,在表t (a,b,c,d)值(10,20,30,40)上,我们让这两个事务(A和B)按下面指定的顺序执行:

1) A、B:设置autocommit=0;

2)B:设置事务隔离级别可重复读;

3)B:从t中选择d;

4)A:更新t集a=a+3;

5)A:提交;

6)B select * from t;

从(6)返回的值是(10,20,30,40),好像(3)上的列d的选择导致在事务B上创建本地快照,并且由于B具有可重复读取,因此它保持一致的值。这是真的吗,还是有另一种解释?

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-05-02 15:04:06

是的,在这种情况下,MySQL似乎会自动启动事务:

假设您在缺省的可重复读隔离级别下运行。当您发出一致的读取(即普通的SELECT语句)时,InnoDB将为您的事务提供一个时间点,根据该时间点,您的查询将看到数据库。

您可以通过提交事务,然后使用一致的快照执行另一个SELECT或START事务来提前时间点。

https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html

尤其是最后一句话听起来像是下一个SELECT将自动创建一个新事务。(它还说明了如何继续前进:commitrollback,但我猜您已经知道这一点。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36969738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档