我想执行这段代码:
这个想法是获取尚未使用的具有最低 MID
的项 (mutex = 0
)。为了防止其他线程读取此行,使用 FOR UPDATE
并且 UPDATE
减少了 mutex
。
START TRANSACTION;
SELECT MID as m, sender, receiver, content FROM queue WHERE mutex = 0 ORDER BY MID ASC limit 1 FOR UPDATE;
UPDATE queue set mutex = -1 WHERE MID = m;
COMMIT;
但是 m
只有在执行 SELECT
行时才知道。我如何在下一个查询中访问它,而不中断查询,这将停止 TRANSACTION
?
P.S.:我知道互斥量与我使用它的目的不同。
最佳答案
你可以使用一个变量:
START TRANSACTION;
SELECT @m:=MID, sender, receiver, content FROM queue WHERE mutex = 0 ORDER BY MID ASC limit 1 FOR UPDATE;
UPDATE queue set mutex = -1 WHERE MID = @m;
COMMIT;
关于MySQL InnoDB 全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452045/