MySQL:更新并发

MySQL: UPDATE Concurrency

我有一个包含两列的 table:item_id(int,auto inc)和 item_counter(int,默认值 0)

网页上的用户通过输入表单分配了一些项目。这运行:

SELECT * FROM itemtable WHERE item_counter<100 ORDER BY RAND() LIMIT 5

随后是更新查询,增加了每个项目的 item_counter。

UPDATE itemtable SET item_counter=item_counter + 1 WHERE item_id=:item_id

大约 20-50 位用户将同时执行此操作。

一个简单的应用程序。 1 SELECT 和 5 个 UPDATE 操作对于每个用户都是连续的,我希望 item_counter 准确(避免这种情况:选择 item_id 具有 item_counter 99 但在该用户能够更新之前被其他用户更新。

我应该在这里使用concurrency/locking吗? 我不知道 InnoDB 的行级锁定是否是所有 UPDATE 操作所固有的,或者是否需要任何语法更改?。我想知道我应该在这里使用什么..或者根本不使用任何东西。

BEGIN;
SELECT ... FOR UPDATE;  -- "FOR UPDATE" is the secret sauce.
UPDATE ...
COMMIT;