【发布时间】:2011-04-08 16:38:13
【问题描述】:
我正在发出一个由多个使用 UNION 分组的 SELECT 组成的 SQL 查询:
SELECT *
FROM employee
LEFT JOIN department
ON employee.DepartmentID = department.DepartmentID
UNION
SELECT *
FROM employee
RIGHT JOIN department
ON employee.DepartmentID = department.DepartmentID;
假设我在READ_COMMITTED事务隔离下执行这个查询,两个SELECT语句是否保证原子执行?或者我是否冒着在单个 SELECT 语句之间更改数据的风险? SQL 规范是否讨论过这类事情?
澄清:当我说“原子”时,我并不是指 ACID 中的“A”。我的意思是,在查询完成之前,我希望部门和员工表都被读锁定。
【问题讨论】:
-
为什么不直接使用全联接?
-
@dlev:我使用的数据库 (H2) 不支持完全联接。
标签: sql transactions