在 SQL 中,如何更新表,将每一行的列设置为不同的值?
我想更新 PostgreSQL 数据库中的一些行,将一列设置为序列中的数字,其中该列具有唯一约束。我希望我可以使用:
update person set unique_number = (select nextval('number_sequence') );
但似乎nextval只被调用一次,所以更新对每一行使用相同的数字,我得到一个“重复键违反唯一约束”错误。我应该怎么做?
在 SQL 中,如何更新表,将每一行的列设置为不同的值?
我想更新 PostgreSQL 数据库中的一些行,将一列设置为序列中的数字,其中该列具有唯一约束。我希望我可以使用:
update person set unique_number = (select nextval('number_sequence') );
但似乎nextval只被调用一次,所以更新对每一行使用相同的数字,我得到一个“重复键违反唯一约束”错误。我应该怎么做?
不要使用子选择,而是直接使用 nextval 函数,如下所示:
update person set unique_number = nextval('number_sequence');
我认为 pg 的序列是一种 hack,并且表明增量整数不是键行的最佳方式。尽管 pgsql 直到 8.3 才获得对 UUID 的原生支持
http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html
UUID 的好处是组合几乎是无限的,不像随机数有一天会发生碰撞。