我有两张桌子。一个是日志表;另一个本质上包含只能使用一次的优惠券代码。
用户需要能够兑换优惠券,这将在日志表中插入一行并将优惠券标记为已使用(通过将used
列更新为true
)。
当然,这里存在明显的竞争条件/安全问题。
我过去在 mySQL 的世界里做过类似的事情。在那个世界中,我会全局锁定两个表,在知道这一次只能发生一次的情况下执行逻辑安全,然后在我完成后解锁表。
Postgres 有没有更好的方法来做到这一点?特别是,我担心锁是全局的,但不是必须的——我真的只需要确保没有其他人试图输入那个特定的代码,所以也许一些行级锁会起作用?