我要执行以下代码:
这样做的目的是得到未使用的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
?备注:我知道互斥是另一种东西,而不是我正在使用它。
最佳答案
可以使用变量:
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 - MySQL InnoDB全局变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15452045/