[英]MySQL InnoDB Global Var?
我要執行以下代碼:想法是獲取尚未使用的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;
但是,僅在執行SELECT
行時才知道m
。 如何在下一個查詢中訪問它而不中斷查詢,這將停止TRANSACTION
?
PS:我知道互斥鎖不是我正在使用的東西。
您可以使用一個變量:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.