微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 在现有表上创建序列

如何在表格上创建序列,使其从0开始 – >最大值?
我尝试使用以下sql代码,但它没有在我正在使用的表中插入任何值:
CREATE SEQUENCE rid_seq;
ALTER TABLE test ADD COLUMN rid INTEGER;
ALTER TABLE test ALTER COLUMN rid SET DEFAULT nextval('rid_seq');

我试图插入序列的表是另一个查询输出。我无法弄清楚在初始查询期间添加序列是否更有意义,或者在执行查询后将序列添加到表中。

解决方法

添加新列时设置认值:
create sequence rid_seq;
alter table test add column rid integer default nextval('rid_seq');

更改现有列的认值不会更改现有数据,因为数据库无法知道应更改哪些值;在列值上没有“此列具有认值”标志,只有认值(原来是NULL,因为你没有指定任何其他内容)和当前值(也是NULL)但方法告诉“NULL”之间的区别因为它是认的“和”NULL,因为它显式设置为NULL“。所以,当你分两步完成时:

>添加列。
>更改认值。

Postgresql不会将认值应用于刚刚添加的列。但是,如果添加列并同时提供认值,则Postgresql确实知道哪些行具有认值(所有行),因此它可以在添加列时提供值。

顺便说一下,你可能也想在该列上使用NOT NULL:

create sequence rid_seq;
alter table test add column rid integer not null default nextval('rid_seq');

并且,正如a_horse_with_no_name所述,如果您只打算将rid_seq用于test.rid列,那么您可能需要set its owner column到test.rid,以便在删除列时删除序列:

alter sequence rid_seq owned by test.rid;

原文地址:https://www.jb51.cc/mssql/84447.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐