我要执行以下代码:
这样做的目的是得到未使用的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/

10-12 17:51