Je verrouillerais uniquement l'enregistrement du produit (avec sélectionner pour la mise à jour - notez que sélectionner verrouiller en mode partage n'empêchera pas un autre utilisateur d'acheter le même produit), puis effectuez le reste de l'opération. De cette façon, je ne bloquerai pas l'achat d'autres produits (alors que le verrouillage de la table bloquera toutes les opérations d'écriture, qu'il y en ait pour le produit 1 ou le produit 2) Et pourquoi vous conservez la propriété max_product_can_sell au lieu de (ou pas avec) available_quantity propriété ?
Dépend du niveau d'isolement. En sérialisable - oui, dans les niveaux inférieurs, je suis presque sûr, non.