独占锁 a table 用于多个查询
Exclusive lock a table for more than one query
我正在开发一个应用程序,我们必须确保只将有限数量的行插入 table。我们正在使用 postgresql
.
它适用于只有有限的 seet 可用的票务系统,当用户要求 seet 时,我首先必须 SELECT
以确保还有一个 seet 可用,如果是这样,我必须 INSERT
进入这个 table 以“保留” seet。
但是,如果在 SELECT
和 INSERT
语句之间插入另一个语句到同一个 table 怎么办?
我读过 LOCKING
但一次只找到一个语句的示例,而不是关于在多个语句之间锁定的示例。
我的问题是:
- 如何为多个语句锁定 table?或者:防止错误数据的最佳策略是什么?
- 如果一个用户锁定了 table,另一个用户的进程会等待另一个进程完成还是会失败?
- 如果我完全错了,那么解决这类问题的正确方法是什么?
我根本不会锁定 table,不需要。我认为。当我有 500 张票时,我会创建 500 条记录(票)。当有人购买多张票时,您必须将这些票更新为已售出。结合使用 SELECT FOR UPDATE 语句和 SKIP LOCKED 来获取您需要的票证数量,然后更新这些选定的记录。多个客户可以同时购票,没有问题。
剩下的唯一一件事就是当你没有 10 张票时有人想买 10 张票时该怎么办。
我正在开发一个应用程序,我们必须确保只将有限数量的行插入 table。我们正在使用 postgresql
.
它适用于只有有限的 seet 可用的票务系统,当用户要求 seet 时,我首先必须 SELECT
以确保还有一个 seet 可用,如果是这样,我必须 INSERT
进入这个 table 以“保留” seet。
但是,如果在 SELECT
和 INSERT
语句之间插入另一个语句到同一个 table 怎么办?
我读过 LOCKING
但一次只找到一个语句的示例,而不是关于在多个语句之间锁定的示例。
我的问题是:
- 如何为多个语句锁定 table?或者:防止错误数据的最佳策略是什么?
- 如果一个用户锁定了 table,另一个用户的进程会等待另一个进程完成还是会失败?
- 如果我完全错了,那么解决这类问题的正确方法是什么?
我根本不会锁定 table,不需要。我认为。当我有 500 张票时,我会创建 500 条记录(票)。当有人购买多张票时,您必须将这些票更新为已售出。结合使用 SELECT FOR UPDATE 语句和 SKIP LOCKED 来获取您需要的票证数量,然后更新这些选定的记录。多个客户可以同时购票,没有问题。
剩下的唯一一件事就是当你没有 10 张票时有人想买 10 张票时该怎么办。