我需要让 MySQL 服务器在其客户端断开连接后立即回滚事务,因为每个客户端同时工作。
在客户端 A上,可以像这样(使用 innodb 表类型)重现问题
:
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
端。我在网络上使用一台服务器和两个客户端进行了尝试。我在线路后物理地断开了网络(拔下电缆)SELECT ... FOR UPDATE;
。我需要让其他客户端能够立即tblone
在事务上使用(锁定、更新),为此我认为服务器应该在客户端 A 断开连接后回滚客户端 A 的事务。