暂无图片
Postgresql 怎么设置主键id自增?
我来答
分享
暂无图片 匿名用户
Postgresql 怎么设置主键id自增?

Postgresql 怎么设置主键id自增?

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
DarkAthena

GENERATED ALWAYS AS ( generation_expr ) STORED
此子句将列创建为generated column。 列无法被写入,读取时将返回指定表达式的结果。

关键字STORED表示将在写入时计算列并将存储在磁盘上。

生成表达式可以引用表中的其他列,但不能引用其他生成的列。使用的任何函数和运算符都必须是不可改变的。不允许引用其他表。

GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ]
该子句将列创建为标识列。 它将拥有一个隐式序列附加到它,并且新行中的列将自动从分配给它的序列中获取值。

子句ALWAYS和BY DEFAULT确定如何在 INSERT和UPDATE命令中明确处理用户指定的值。

在INSERT命令中,如果选择了ALWAYS,则仅当 INSERT 语句指定OVERRIDING SYSTEM VALUE时 才接受用户指定的值。如果选择BY DEFAULT,则用户指定的值优先。 有关详细信息,请参阅INSERT。(在COPY命令中, 无论此设置如何,始终使用用户指定的值。)

在UPDATE命令中,如果选择了ALWAYS, 则将列更新为除DEFAULT之外的任何值都将被拒绝。 如果选择BY DEFAULT,则该列可以正常更新。 (UPDATE命令没有OVERRIDING子句。)

参考文档 http://postgres.cn/docs/13/sql-createtable.html

举例

CREATE TABLE tab (id int generated always as identity); CREATE TABLE tab (id int generated by default as identity);
暂无图片 评论
暂无图片 有用 0
暂无图片
薛晓刚

一般MySQL这样的聚集索引表需要id自增,为了顺序写入。

Oracle PG是堆表没必要id自增。

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏