如何在PostgreSQL中实现自动递增?

21

我有一个名为Login的表格,它包含了rank,username和password这几个字段。

我希望rank字段的值能够随着username和password的添加而自动递增。

在PostgreSQL中,我该如何实现这个功能?


2
顺便提一下,你的问题中有一个小的打字错误。应该是“increment”而不是“increament”。如果你改正了它,更多的人会找到这个问题,相关的问题也会更加合适。 - pyrocumulus
这是关于现有表的问题,而另一个问题更多地涉及新表。所以,除非你合并它们,否则它们不是真正的重复。 - DanMan
从PostgreSQL 10开始,推荐使用INTEGER PRIMARY KEY generated always as identity代替SERIAL - TarHalda
3个回答

49
你正在寻找一个数据类型为Serial的列。请参考此页面(底部)了解该数据类型的更多信息。
例如,你的表定义可能如下所示:
CREATE TABLE yourtable (
    rank SERIAL NOT NULL,
    username VARCHAR(20) NOT NULL,
    password VARCHAR(50) NOT NULL
);

@Milen A. Radev,感谢您为我的链接添加锚点 :) - pyrocumulus
1
自增功能的工作方式如下:insert into yourtable (username, password) values ('moobars', 'boobars'); 然后数据库会自动递增排名列。 - Eric Leschinski
4
SERIAL不是数据类型,只是一个带有序列默认值的整数的别名(请参见Sanjay Kumar的回答)。 - leonbloy

33

可以创建一个序列(Sequence),它会自动递增rank列的值。

CREATE SEQUENCE rank_id_seq;

CREATE TABLE yourtable (
    rank INTEGER NOT NULL default nextval('rank_id_seq'),
    username VARCHAR(20) NOT NULL,
    password VARCHAR(50) NOT NULL
);

ALTER SEQUENCE rank_id_seq owned by yourtable.rank;

4
create table login (rank serial, username varchar(20), password varchar(20))

串行数据类型是您想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接