Zablokowałbym tylko rekord produktu (z wybierz do aktualizacji - uwaga, wybierz blokadę w trybie udostępniania nie zablokuje innym użytkownikom możliwości zakupu tego samego produktu), a następnie wykonaj resztę operacji. W ten sposób nie zablokuję zakupu innych produktów (podczas gdy zablokowanie tabeli zablokuje wszelkie operacje zapisu, niezależnie czy są dla produktu 1 czy produktu 2) I dlaczego zachowujesz właściwość max_product_can_sell zamiast (lub nie razem z) available_quantity nieruchomość?
Zależy od poziomu izolacji. W serializacji - tak, na niższych poziomach, jestem prawie pewien, że nie.