Wanneer je fysiek een client loskoppelt, verzend je geen normale disconnect (wat een rollback zou hebben veroorzaakt) en het MySQL-protocol is niet erg spraakzaam, dus de server weet nooit dat de client er niet is. Ik denk dat dit een fout in het protocol is in vergelijking met andere databasesystemen waar de client en server veel meer intern met elkaar praten.
In ieder geval. Er zijn twee variabelen die u kunt wijzigen. Ze doen in principe hetzelfde, maar voor verschillende klanten.
De eerste is wait_timeout en het wordt gebruikt door applicatieclients zoals java of php.
De andere is interactive_timeout en het wordt gebruikt door de mysql-client (zoals in uw tests)
In beide gevallen verbreekt de server de verbinding na een aantal seconden en zet daarbij alle transacties terug en geeft alle vergrendelingen vrij.