Бих заключил само записа на продукта (с избиране за актуализация - имайте предвид, че изберете заключване в режим на споделяне няма да блокира друг потребител да купи същия продукт) и след това извършете останалата част от операцията. По този начин няма да блокирам закупуването на други продукти (докато заключването на таблицата ще блокира всякакви операции по запис, независимо дали има за продукт 1 или продукт 2) И защо запазвате свойството max_product_can_sell вместо (или не заедно с) available_quantity собственост?
Зависи от нивото на изолация. При възможност за сериализиране - да, на по-ниски нива, почти съм сигурен, че не.