gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:04:10 25 4
gpt4 key购买 nike

向大家问好,

最近我尝试了下面发布的场景,希望得到您的意见。使用 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从t中选择*;

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

预先感谢您的帮助。

最佳答案

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

Suppose that you are running in the default REPEATABLE READ isolation level. When you issue a consistent read (that is, an ordinary SELECT statement), InnoDB gives your transaction a timepoint according to which your query sees the database.

[…]

You can advance your timepoint by committing your transaction and then doing another SELECT or START TRANSACTION WITH CONSISTENT SNAPSHOT.

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

特别是最后一句听起来下一个SELECT将自动创建一个新交易。 (它还说明了要继续执行的操作:commitrollback,但我想您已经知道了。)

关于MySQL - 特定列上的 SELECT 命令是否会导致事务中的本地快照?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com