На мой вопрос я ссылаюсь на пример тупика в официальных документах на https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlock-example.html.
Мне любопытно, почему разработчики MySQL решили не разрешать повторное поступление блокировок, то есть разрешить транзакции использовать блокировку, которую она уже удерживает, пропуская перед очередью.
В примере, когда написано Finally, client A also attempts to delete the row from the table:
, почему А не может просто пропустить очередь, так как она уже удерживает блокировку, и продолжить удаление строки? Затем клиент B выполняет свою транзакцию, не находит ни одной строки, которая соответствует i=1
, и успешно завершается. Неужели нельзя так полностью избежать тупика?