Database 如何克服两个用户同时在表中保存数据的问题

Database 如何克服两个用户同时在表中保存数据的问题,database,postgresql,Database,Postgresql,我正在实现一个座位预订应用程序。我有个问题。有一张预订表。如果两个用户试图在同一时间预订同一个座位,这将是一个问题。我怎样才能克服这个问题。我使用的是Java 8和PostgreSQL。数据库系统设计用于处理并发查询,就像您的情况一样。 然而,你需要确保一个座位只能预定一次 解决方案#1如果您在预订表中为每个预订座位插入一个新条目 INSERT INTO booking (booking_id, seat_id, customer_id) SELECT ?,?,? WHERE NOT EXIS

我正在实现一个座位预订应用程序。我有个问题。有一张
预订
表。如果两个用户试图在同一时间预订同一个座位,这将是一个问题。我怎样才能克服这个问题。我使用的是Java 8和PostgreSQL。

数据库系统设计用于处理并发查询,就像您的情况一样。 然而,你需要确保一个座位只能预定一次

解决方案#1如果您在预订表中为每个预订座位插入一个新条目

INSERT INTO booking (booking_id, seat_id, customer_id) 
SELECT ?,?,?
WHERE NOT EXISTS (SELECT seat_id FROM booking WHERE seat_id=?)
此解决方案将检查数据库中是否已存在带有您试图预订的座位id的预订条目。这也可以通过在表中的seat_id属性上设置唯一约束来实现。但是,在这种情况下,您的查询将失败并出现错误—因为在插入重复值时违反了唯一约束—而在上面的解决方案中,查询将成功执行,而不会插入任何值。首选此解决方案

解决方案#2:如果数据库中的每个座位都有一行,只需更新是否已预订

UPDATE booking
SET booking_id=?, booked=true
WHERE seat_id=? AND booked = false
根据您的JDBC库,您是否能够替换?用你真正的价值观


数据库系统将处理并发查询,并且只允许通过一个查询。

如果第一次插入由两个事务同时运行,您仍然会在同一座位上进行两次预订。为了避免这种情况,您必须有一个唯一的约束。@Kylro数据库正在处理在同一时间完成的并发查询吗?