Necesito hacer que el servidor MySQL revertir la transacción inmediatamente después de que su cliente se desconectó, porque cada cliente funciona al mismo tiempo. El problema se puede reproducir como estos (utilizando un tipo de tabla InnoDB)
El Cliente A:Retroceso de MySQL en la transacción con la conexión perdida/desconectada
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... then disconnect your connection to the server
El Cliente B:
START TRANSACTION;
SELECT MAX(ID) FROM tblone FOR UPDATE;
#... lock wait time out will occur here
me había propuesto opción de servidor de MySQL como innodb_rollback_on_timeout
y el uso cliente de mysql mysql --skip-reconnect
en ambos clientes. Intenté esto usando un servidor y dos clientes en una red. Desconecté físicamente la red (desconecto el cable) después de la línea SELECT ... FOR UPDATE;
. Necesito hacer que otros clientes puedan usar el tblone
en una transacción (bloquearlo, actualizarlo) inmediatamente, y para que eso suceda, creo que el servidor debería revertir la transacción para el Cliente A, después de que el Cliente A se desconecte.
Interesante pregunta. ¡Pensé que esto es automático! Entonces necesitamos algo como 'innodb_rollback_on_disconnect' .. eso sería genial y yo diría, ¡ese debería ser el predeterminado! Esa sería una solicitud de cambio razonable para mysql. – TMS