2016-03-30 36 views
3

サービスがクライアントから要求されたときに、MySQLテーブル内で占有されている行が更新され、そのレコードが提供されるという点で、安らかなWebサービスをjava hibenrateで開発しています。更新テーブルは= 1、ID = 1java mysqlで同時に複数のリクエストを処理する

occupied_status設定occupied_status

1として

私のテーブルには、私は最初のレコードを更新する必要が

ID Name Occupied_Status 
1 Vicky 0 
2 Rocky 0 

のように見えます

はoccupied_status = 1つの制限は1

それが占有していることを返すように、複数の要求が同じ行同時にその更新がサービスを打ったときに私の問題があるtime.Butで単一の要求のために良い作品テーブルから選択します*すべての要求に対して同じレコードが必要です。要求ごとに個別のレコードを提供する必要があります。これを処理するために私を助けてください。まず、あなたが

update table set occupied_status =1 where id = 1 and occupied_status =0 

を使用して、変更された行の数をテストする可能性があるため

+0

あなたのリクエストはIDまたは名前で識別されていますか? – AJNeufeld

+0

要求の場合、利用可能なレコードはstatus = 0でなければなりません。 – Vicky

答えて

0

(0は、それが自由ではなかった意味)

以下は、一意の行を返すことが保証されていません。複数のリクエストは常に同じ行を得ることができます!

select * from table where occupied_status =1 limit 1 

ロックを使用して読み取り - 変更 - 書き込みを行い、一意の行を取得する必要があります。

+0

しかし、それは占有されている新しいレコードを更新し、そのレコードを返さなければなりません。すべての要求に対して、新しいレコードを更新して返す必要があります。 – Vicky

+0

'select'と' update'をしたいですか?その場合は、選択する前にテーブルをロックし、更新後にロックを解除する必要があります。 – AJNeufeld

+0

しかし、私はそのテーブルをロックすると、他のユーザーのためにはうまく動作しません。 – Vicky

関連する問題