我需要让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
。在一个网络上,我尝试使用一个服务器和两个客户端进行测试。我在SELECT ... FOR UPDATE;
语句后,物理断开了网络连接(拔掉电缆)。我需要让其他客户端立即能够在事务中使用tblone
(锁定它,更新它),为此我认为服务器应该在客户端A断开连接后回滚客户端A的事务。
innodb_rollback_on_disconnect
这样的东西..那将会很棒,我认为应该成为默认设置!这将是mysql的一个合理变更请求。 - Tomas