假设我像这样定义一个表:
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行。这太好了。现在集群中的一个线程将开始做它的事情,其余的将保持不变。
然而,有些事情并不适合我。这是一种有效的方法吗?或者有更好的方法可以考虑吗?
答案 0 :(得分:1)
是and status <> 'WORKING_ON_IT
应确保仅应用第一次更新。 (0 row(s) affected)
意味着没有任何改变。
多次运行测试自己。