Мне нужно сделать 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 client mysql --skip-reconnect
на обоих клиентах. Я попробовал это, используя один сервер и два клиента в сети. Я отключил сеть физически (отсоедините кабель) после строки SELECT ... FOR UPDATE;
. Мне нужно, чтобы другие клиенты могли использовать tblone
для транзакции (заблокировать ее, обновить) немедленно, и для этого я думаю, что сервер должен отменить транзакцию для клиента A после того, как Клиент А отключится.