联合查询是否作为一项交易?

Is union queries act as one transaction?

假设,我有这样的查询:

SELECT id1 AS id, SUM(`value`), 'in' AS `type` FROM transaction WHERE id1 = 3434
UNION
SELECT id2 AS id, SUM(`value`), 'out' AS `type` FROM transaction WHERE id2 = 4568

查询 #2 看到的数据是否与查询 #1 开始时相同?

首先,您的示例是一个单个查询,而不是两个查询。 query,按照写的,会扫描源数据两次,但仍然是一个query。

你要找的属性就是ACID的"isolation"属性。您可以了解有关 ACID 的更多信息 here and on MySQL's support here.

大多数数据库,包括 MySQL,都符合 ACID 标准并具有正确的配置参数。然而,这是由各种参数控制的,尤其是单个事务的隔离级别。因为完全符合 ACID 可能需要大量开销(例如,一旦 SELECT 查询在同一个 table 上启动,就完全阻止 UPDATE 从 运行,一些的条件有时会放宽。

ACID 合规性取决于您的特定配置和存储引擎的参数。但是,如果需要,MySQL 可以并且确实支持隔离。

另请注意,UNION 与隔离几乎没有关系,除了它需要扫描数据两次,这会使缺乏隔离更加明显。