Når du fysisk afbryder en klient, sender du ikke en normal afbrydelse (hvilket ville have forårsaget en rollback), og MySQL-protokollen er ikke særlig chatty, så serveren ved aldrig, at klienten ikke er der. Jeg tror, at dette er en fejl i protokollen, når man sammenligner med andre databasesystemer, hvor klienten og serveren taler meget mere internt.
Alligevel. Der er to variabler, som du kan ændre. De gør stort set det samme, men for forskellige kunder.
Den første er wait_timeout og det bruges af applikationsklienter som java eller php.
Den anden er interactive_timeout og det bruges af mysql-klienten (som i dine tests)
I begge tilfælde afbryder serveren forbindelsen efter et antal sekunder, og når du gør det, ruller alle transaktioner tilbage og frigiver alle låse.