0

2 つのクライアントを持つクライアント サーバー アプリケーションがあります。

複数のクライアントがデータベースを読み取っているときに、すべてのクライアントが同じ行を取得することなく、データベースの読み取りを効率的にする必要があります。私はテーブルに InnoDB エンジンを使用しています。クエリは好きSELECT...FOR UPDATEで、使用していません。SHARED MODE

次のシナリオでプロセスがどのように動作するかについて説明が必要です。

  1. テーブルに 30 行あります。各クライアントには、データベースへの接続オブジェクトが 1 つあります。
  2. クライアント A は で 15 行を取得しSELECT ...FOR UPDATEます。これらの行はロックされていると想定されています。
  3. クライアント B は、クライアント A によってロックされていない他の 15 行をそれぞれ取得する必要がありSELECT ..FOR UPDATEます。

このシナリオをテストすると、クライアント B もクライアント A の 15 行を取得しました。私は設定し、実行も照会setAutoCommit(false)もしません。したがって、接続は決してコミットされず、(クライアント A がしたなど) 設定されたロックは決して解放されません。COMMITROLLBACK

誰かが私を正しい方向に向けることができますか? 私が間違っていることは何ですか?

4

1 に答える 1

1

混乱しています。15行をロックしようとしていますか?もしそうなら、あなたは行方不明です:

START TRANSACTION

トランザクションドキュメントへのリンクは次のとおりです。

http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html

于 2012-10-12T13:21:19.880 に答える