在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的sequences是hack和逐渐增加的整数不是对行进行键入的最佳方式的迹象。尽管pg没有在8.3之前获得UUID的原生支持。
http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html
UUID的好处在于组合方式几乎是无限的,不像随机数一样会有一天撞上碰撞。uuid
模块使用随机组件,但远不到128个随机位数。如果序列循环,它们才会产生冲突,而随机数则可能会出现碰撞... 随机地。 - wberry