各クライアントが同時に動作するため、クライアントが切断された直後にMySQLサーバーがトランザクションをロールバックするようにする必要があります。問題は次のように再現できます (innodb テーブル タイプを使用)
クライアント A:
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server
クライアント B:
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here
MySQLのサーバーオプションを設定し、両方のクライアントでinnodb_rollback_on_timeout
mysqlのクライアントを使用していました。mysql --skip-reconnect
ネットワーク上で1台のサーバーと2台のクライアントを使用してこれを試しました。ラインの後、ネットワークを物理的に切断しました(ケーブルを抜きました)SELECT ... FOR UPDATE;
。他のクライアントがすぐにトランザクションで使用できるようにするtblone
(ロック、更新) 必要があります。そのためには、クライアント A が切断された後、サーバーがクライアント A のトランザクションをロールバックする必要があると思います。