如何确保只应用一个更新?

时间:2018-03-08 14:09:06

标签: sql sql-server database

假设我像这样定义一个表:

create table anonymized_example(
  id bigint IDENTITY(1,1) PRIMARY KEY,
  status varchar(50) not null,
  other_columns varchar(50));

现在,有时候群集中的线程可能希望同时更新此表。我的想法是运行这样的查询:

update reservation_proxy_order,
set status='WORKING_ON_IT',
where id=?,
and status <> 'WORKING_ON_IT';

据我了解,这意味着其中一个线程将首先更新,并返回1行已更新,其他线程将报告它们更新了0行。这太好了。现在集群中的一个线程将开始做它的事情,其余的将保持不变。

然而,有些事情并不适合我。这是一种有效的方法吗?或者有更好的方法可以考虑吗?

1 个答案:

答案 0 :(得分:1)

and status <> 'WORKING_ON_IT应确保仅应用第一次更新。 (0 row(s) affected)意味着没有任何改变。

多次运行测试自己。