我需要在MySQL/InnoDB上执行以下操作。假设我有一个由3科尔组成的表(id、计数器、status)
我需要:
要求:
在性能和可伸缩性方面,什么是最好的解决方案(适用于大型表)?
发布于 2011-05-06 15:52:45
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT id
FROM mytable
WHERE status = 0
FOR UPDATE;
UPDATE mytable
SET status = 1,
cnt = cnt + 1
WHERE status = 0;
COMMIT;发布于 2011-05-06 15:53:33
您可以在一个语句中选择和更新,该语句应该以原子方式执行:
UPDATE tbl SET status=1, counter=counter+1 WHERE status=0;我不知道在步骤3中您想要什么,因为涉及到多个id。您希望从SELECT语句中获得id行表吗?如果是这样,您可以使用存储过程,或者使用SELECT ... LOCK IN SHARE MODE。
发布于 2011-05-06 17:08:48
你能做到的
SELECT id
FROM mytable
WHERE status = 0
FOR UPDATE;然后在您的软件中构建ids列表,然后执行
UPDATE mytable
SET status = 1,
cnt = cnt + 1
WHERE id IN (...)https://stackoverflow.com/questions/5913784
复制相似问题