假设,我有这样的疑问:
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开始时相同的数据?
发布于 2015-01-13 12:10:56
首先,您的示例是一个查询,而不是两个查询。所编写的查询将扫描源数据两次,但仍然是一个查询。
您要寻找的属性是ACID的“隔离”属性。您可以了解更多关于ACID 这里和MySQL的支持这里的信息。
大多数数据库,包括MySQL,都与正确的配置参数兼容。但是,这是由各种参数控制的,特别是单个事务的隔离级别。因为完全遵循ACID可能需要大量的开销(例如,一旦在同一表上启动了UPDATE查询,就会阻止SELECT运行),所以有时会放松一些条件。
酸遵从性取决于特定配置的参数和存储引擎。但是,如果需要的话,MySQL可以并且确实支持隔离。
还要注意的是,UNION与隔离关系不大,只是需要对数据进行两次扫描,这将使隔离的缺失更加明显。
https://stackoverflow.com/questions/27921175
复制相似问题