Когда вы физически отключаете клиента, вы не отправляете обычное отключение (которое могло бы вызвать откат), и протокол MySQL не очень болтлив, поэтому сервер никогда не узнает, что клиента нет. Я думаю, что это недостаток протокола по сравнению с другими системами баз данных, где клиент и сервер взаимодействуют внутри себя гораздо больше.
В любом случае. Есть две переменные, которые вы можете изменить. Они в основном делают то же самое, но для разных клиентов.
Первый - wait_timeout , и он используется клиентами приложений, такими как java или php.
Другой - interactive_timeout , и он используется клиентом mysql (как в ваших тестах)
В обоих случаях сервер прерывает соединение через несколько секунд и при этом откатывает все транзакции и снимает все блокировки.