【发布时间】:2010-12-03 04:17:33
【问题描述】:
我正在研究一种工作排队解决方案。我想查询数据库中的给定行,其中状态列具有特定值,修改该值并返回该行,并且我想原子地执行它,这样其他查询就不会看到它:
begin transaction
select * from table where pk = x and status = y
update table set status = z where pk = x
commit transaction
--(the row would be returned)
必须不可能有 2 个或更多并发查询返回该行(一个查询执行会在其状态 = y 时看到该行)——有点像一个互锁的 CompareAndExchange 操作。
我知道上面的代码可以运行(用于 SQL 服务器),但是交换总是原子的吗?
我需要一个适用于 SQL Server 和 Oracle 的解决方案
【问题讨论】:
-
您的队列解决方案是否需要同时在 Oracle 和 SQL Server 中工作?如果只有 Oracle,您可能应该研究 Oracle Advanced Queuing。
-
@Stephen Nope - 它必须与两者一起使用。我们销售此软件,并支持两个后端。我们发现我们最好的策略是不依赖于特定产品的特性,并且尽可能只使用 ANSI SQL 语法(尽管我们可以在必要时为我们的语法加上大小写括号)。
标签: sql sql-server database oracle