Když fyzicky odpojujete klienta, neposíláte normální odpojení (což by způsobilo vrácení zpět) a protokol MySQL není příliš upovídaný, takže server nikdy neví, že klient není. Myslím, že toto je chyba v protokolu ve srovnání s jinými databázovými systémy, kde klient a server mluví interně mnohem více.
Tak jako tak. Existují dvě proměnné, které můžete změnit. V zásadě dělají totéž, ale pro různé klienty.
První je wait_timeout a používají jej klienti aplikací jako java nebo php.
Druhý je interactive_timeout a používá ho klient mysql (jako ve vašich testech)
V obou případech server ukončí připojení po několika sekundách, a když tak učiní, vrátí zpět všechny transakce a uvolní všechny zámky.