【发布时间】:2019-12-10 03:03:39
【问题描述】:
我有一个按项目跟踪唯一user_id 的列(供外部使用)。
我想在创建新用户时增加user_id 列,这取决于该项目的计数。已有许多记录,但从现在开始,我们希望 user_id 为给定 project_id 中的每个新记录增加 1。
用户表示例
id user_id project_id
-------------------------
1 100 1
2 101 1
3 1000 2
4 1001 2
5 17 3
6 18 3
7 102 1
New row with project_id = 1 should use user_id = 103
New row with project_id = 2 should use user_id = 1002
New row with project_id = 3 should use user_id = 19
如何构造user_id 列和/或INSERT 查询,使其始终根据对应project_id 中现有的最大user_id 递增user_id,并保证没有两个用户在同一个项目中,在并发插入时分配了相同的user_id?
【问题讨论】:
-
任何解决方案都将比基于序列的计数器更昂贵(并发性更差)。对不同的
project_ids 具有相同号码的要求对您来说如此重要吗? -
@LaurenzAlbe 我不确定你在问什么,但项目之间的
user_ids根本不相关 -
我的意思是,为什么不创建一个独立于
product_id的生成user_id的序列? -
id基本上就是这样,但是每个项目都有用户,并且需要在项目中拥有唯一的、连续的user_ids。 -
如果你使用一个序列,它们仍然是唯一的并且会增加,只是会有间隙。除非您有禁止此类差距的法律要求,否则请接受它们。它会让一切变得更快、更简单、更好。
标签: sql postgresql