Jag skulle bara låsa produktposten (med välj för uppdatering - notera, välj lås i delningsläge blockerar inte andra användare att köpa samma produkt) och utför sedan resten av operationen. På detta sätt kommer jag inte att blockera köp av andra produkter (medan jag låser bordet kommer alla skrivoperationer att blockeras, oavsett om det finns för produkt 1 eller produkt 2) Och varför du behåller egenskapen max_product_can_sell istället för (eller inte tillsammans med) tillgänglig_kvantitet egendom?
Beror på isoleringsnivå. I serialiserbar - ja, på lägre nivåer är jag nästan säker på, nej.