0

私の要件は、ユーザーがクリックして取引を利用できることです。1 つの取引は 1 人のメンバーのみが利用できるため、ユーザーが取引を利用しようとするとテーブルをロックし、ロックを解除します。そのため、2 人のユーザーがクリックして取引を利用しようとすると、キューが形成され、2 人のユーザーが取引を利用できなくなります。

コードは次のようになります

LOCK TABLES deal WRITE;
//MySQL queries and my php code goes here.
UNLOCK TABLES;

問題は、ロックとロック解除の間に私のphpコードで何らかの問題が発生した場合、テーブルは永久にロックされるのでしょうか? とにかく、テーブルをロックする最大時間を設定できますか?

4

2 に答える 2

0

クライアントセッションの接続が正常または異常に終了すると、サーバーはセッションによって保持されているすべてのテーブルロックを暗黙的に解放します。

ソース

于 2012-06-12T09:48:05.427 に答える
0

私があなたの立場にいたら、locked_deals という名前のデータベース テーブルを作成したでしょう。deal_id という名前の列があります。ユーザーが取引を選択するたびに、その deal_id が locked_deals テーブルに挿入されます。そして、次のユーザーが同じ取引をクリックすると、最初に deal_id がロック テーブルにあるかどうかがチェックされます。はいの場合、ユーザーは取引を選択できません。最後に、すべてがうまくいけば、プロセスの最後にロック テーブルから lock_id を削除できます。PHP コードの例外のためにテーブルにスタックした lock_ids については、locked_deals テーブル内のスタックした ID (過去 n 分間スタックしたもの) を n 分ごとにクリーンアップするバックグラウンド サービスを作成できます。それが役に立てば幸い。

于 2012-06-12T08:49:01.333 に答える