1つでそれを行う:
UPDATE `users`
SET `rights` = '[PRO]', points = points - 50
WHERE
`username` = 'somename'
AND points >= 50
AND rights != '[PRO]'
そして、影響を受けた行があるかどうかを確認するだけです。彼らが十分なポイントを持っていない場合、それは更新されません、そして彼らがすでに権利を持っているときも更新されません。これにより、競合状態が回避されます。