Bloquearía solo el registro del producto (con seleccionar para actualizar - nota, seleccione bloquear en modo compartir no bloqueará a otro usuario para comprar el mismo producto) y luego realice el resto de la operación. De esta manera, no bloquearé la compra de otros productos (mientras que bloquear la tabla bloqueará cualquier operación de escritura, independientemente de si hay para el producto 1 o el producto 2) Y por qué mantiene la propiedad max_product_can_sell en lugar de (o no junto con) cantidad_disponible propiedad?
Depende del nivel de aislamiento. En serializable, sí, en niveles inferiores, estoy casi seguro, no.