Селект
Проверка инварианта с количеством в коде
Если не ок: роллбэк руками, вернуть сообщение о недостаче
Если ок: обновить записи, коммит, вернуть сообщение об успехе
Если внезапный роллбэк: пойти на новый круг, если дело в том, что кто-то обновил количество, то это поймает один из предыдущих шагов алгоритма
Если это уже пятый/десятый/энный круг: залогировать все что можно, вывести пользователю сообщение о неожиданной ошибке и попросить повторить позде