13

在 SQL 中,如何更新表,将每一行的列设置为不同的值?

我想更新 PostgreSQL 数据库中的一些行,将一列设置为序列中的数字,其中该列具有唯一约束。我希望我可以使用:

update person set unique_number = (select nextval('number_sequence') );

但似乎nextval只被调用一次,所以更新对每一行使用相同的数字,我得到一个“重复键违反唯一约束”错误。我应该怎么做?

4

2 回答 2

33

不要使用子选择,而是直接使用 nextval 函数,如下所示:

update person set unique_number = nextval('number_sequence');
于 2008-09-29T09:01:21.340 回答
0

我认为 pg 的序列是一种 hack,并且表明增量整数不是键行的最佳方式。尽管 pgsql 直到 8.3 才获得对 UUID 的原生支持

http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html

UUID 的好处是组合几乎是无限的,不像随机数有一天会发生碰撞。

于 2008-11-06T18:13:13.480 回答