我是 Postgres 的新手(甚至是 SQL)。我正在构建一个密钥数据库,它有一个名为 Key 的表。我的问题是如何在 pg.
如果一个连接正在读取第一条记录,同时第二条连接进来,它应该读取第二条记录而不是第一条。第 3 次第 4 次也是如此,以此类推。
我是 Postgres 的新手(甚至是 SQL)。我正在构建一个密钥数据库,它有一个名为 Key 的表。我的问题是如何在 pg.
如果一个连接正在读取第一条记录,同时第二条连接进来,它应该读取第二条记录而不是第一条。第 3 次第 4 次也是如此,以此类推。
您可以使用select for update
. FOR UPDATE
导致SELECT
语句检索到的行被锁定,就像更新一样。这可以防止它们被其他事务锁定、修改或删除,直到当前事务结束。
注意力:
SELECT FOR UPDATE
将等待已在同一行上运行任何这些命令的并发事务,然后将锁定并返回更新的行(或没有行,如果该行已被删除)
现在我将为您编写查询示例并解释如何执行此操作:假设我们有一个这样的表:
Table name: key_table
key is_used
00001 true
00002 true
00003 false
00004 false
00005 false
select key from key_table
where
is_used = false
order by key desc
limit 1 for update
into v_key;
update key_table
set
is_used = true
where key = v_key;
命令后select
选定的行将被锁定。在更新之前,用户不能在任何其他会话中选择此行。选择此行时,所有用户都将等待此更新。命令后update
用户可以显示下一行 is_used = false