0

Counters 表(SQL 数据库表)

CounterID     |CounterValue
1             |5
2             |3  

我有多个客户端通过 JDBC 访问/修改(递增和递减)这些计数器。同步处理计数器的最佳方法是什么。

当前客户端首先选择计数器值,然后将其递增并更新值。但问题是如果两个客户端在另一个客户端更新计数器值之前确实选择了相同的值。

请指教。谢谢。

4

1 回答 1

1

以下将确保每个调用都获得唯一的计数器值。在自治事务中运行它:

While (true) do
  SELECT CounterValue into cv FROM CountersTable WHERE CounterID = 1;
  UPDATE countertable SET CounterValue = cv+1 WHERE CounterID = 1 and CounterValue = cv;
  IF (rows updated > 0) THEN
     COMMIT;
     EXIT LOOP; --No one else modified the CounterValue
  END IF
End do;
于 2013-10-24T08:02:57.243 回答