1

このコードを実行したい:アイデアは、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ですか?

PS:ミューテックスは私が使っているものとは別のものだと知っています。

4

1 に答える 1

1

変数を使用できます:

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;
于 2013-03-16T17:11:33.080 に答える