0

私は Web サイトを持っています。このメソッドには、(バッキング Bean 内に) いくつかの READ 要求 (たとえば、ユーザーの権限を確認するため) を実行してから、いくつかのデータを挿入するメソッドがあります。

手順は次のようになります。

1.) SELECT * FROM userLocks (table which logs the users which are exclusively working on a topic, to avoid redundancy). it checks if there is currently no lock (user working) for the topic.
2.) SELECT * FROM ... (some other selects for further checking)
3.) INSERT INTO userLocks (curUser, timeout) values (...) (if everything was ok, create a new lock for the current user for the topic)

私が今直面している問題は次のとおりです。最初の選択と挿入の間で、他の多くのユーザーがテーブル userLocks のデータを操作する同じ Web サイトを要求できます。スレッドセーフではないようです。

この問題の解決策はありますか? 私が必要とするのは、他のユーザーのためにこの手順中に使用されたすべてのテーブルがロックされていることだけです。(他のリクエストは、ロックが解除されるまで待つ必要があります。これには0.5秒以上かかりません...)

(私はInnoDBを使用しています)

4

1 に答える 1

0

SQL トランザクションを少し調べて、InnoDB の行とテーブルのロックを調べる必要があることをお勧めします。これは私を助けた記事でしたhttps://blogs.oracle.com/mysqlinnodb/entry/introduction_to_transaction_locks_in

于 2013-10-07T12:24:17.593 に答える