各クライアントが同時に動作するため、クライアントが切断された直後にトランザクションをロールバックするようにMySQLサーバを作成する必要があります。私はinnodb_rollback_on_timeout
のようにMySQLのサーバー・オプションを設定し、使用していた接続が紛失/切断されたMySQLロールバック
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here
:クライアントBで
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server
:問題は、クライアントAで
(のInnoDBテーブルタイプを使用して)これらのように再現することができます両方のクライアントでmysqlのクライアントmysql --skip-reconnect
。私はネットワーク上で1台のサーバーと2台のクライアントを使ってこれを試しました。私はSELECT ... FOR UPDATE;
行の後にネットワークを物理的に切断しました(ケーブルを外します)。私は他のクライアントにトランザクション(ロック、更新)をtblone
で使用できるようにする必要があります。クライアントAが切断された後、クライアントAのトランザクションをロールバックする必要があります。
興味深い質問です。私はこれが自動だと思った!だから私は 'innodb_rollback_on_disconnect'のようなものが必要です。それは素晴らしいでしょう、私は、デフォルトでなければならないと言っています!それはmysqlの合理的な変更要求です。 – TMS