计数器表(SQL数据库表)
CounterID |CounterValue
1 |5
2 |3
我有多个客户端通过JDBC访问/修改(递增和递减)这些计数器。同步处理计数器的最佳方法是什么。
当前客户端首先选择计数器值,然后递增它并更新值。但问题是两个客户端在另一个客户端更新计数器值之前是否选择了相同的值。
请指教。 感谢。
答案 0 :(得分: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;