Uzamkl bych pouze záznam o produktu (pomocí vybrat pro aktualizaci - všimněte si, že výběrem zámku v režimu sdílení nezablokujete jiného uživatele v nákupu stejného produktu) a poté proveďte zbytek operace. Tímto způsobem nebudu blokovat nákup jiných produktů (zatímco uzamčení tabulky zablokuje jakékoli operace zápisu, bez ohledu na to, zda existují pro produkt 1 nebo produkt 2) A proč ponecháváte vlastnost max_product_can_sell místo (nebo ne spolu s) available_quantity majetek?
Závisí na úrovni izolace. V serializovatelných - ano, v nižších úrovních, jsem si téměř jistý, ne.