2 つのクライアントを持つクライアント サーバー アプリケーションがあります。
複数のクライアントがデータベースを読み取っているときに、すべてのクライアントが同じ行を取得することなく、データベースの読み取りを効率的にする必要があります。私はテーブルに InnoDB エンジンを使用しています。クエリは好きSELECT...FOR UPDATE
で、使用していません。SHARED MODE
次のシナリオでプロセスがどのように動作するかについて説明が必要です。
- テーブルに 30 行あります。各クライアントには、データベースへの接続オブジェクトが 1 つあります。
- クライアント A は で 15 行を取得し
SELECT ...FOR UPDATE
ます。これらの行はロックされていると想定されています。 - クライアント B は、クライアント A によってロックされていない他の 15 行をそれぞれ取得する必要があり
SELECT ..FOR UPDATE
ます。
このシナリオをテストすると、クライアント B もクライアント A の 15 行を取得しました。私は設定し、実行も照会setAutoCommit(false)
もしません。したがって、接続は決してコミットされず、(クライアント A がしたなど) 設定されたロックは決して解放されません。COMMIT
ROLLBACK
誰かが私を正しい方向に向けることができますか? 私が間違っていることは何ですか?