在PostgreSQL中生成自动ID

4

用户表:

    ID  Name
    1   usr1
    2   usr2
    3   usr3

在上表中,ID是主键。我的要求是在向表中插入数据时,我只想指定名称,如INSERT INTO user VALUES('usr4')。执行查询后,是否有自动为“usr4”创建ID的方法?
我尝试使用序列数据类型。对于这个,我们也必须指定关键字default,如INSERT INTO user VALUES(default,'usr4')。那么,是否有像INSERT INTO user VALUES('usr4')这样的方法?注意:ID应该是唯一的。

请告诉我们您的创建表查询语句。 - Ankit Agrawal
1
使用 sequence。http://www.postgresql.org/docs/8.1/static/sql-createsequence.html - Jimish Gamit
1
你的表结构应该像这样:CREATE TABLE table1 ( id serial NOT NULL, name character varying, CONSTRAINT table1_pkey PRIMARY KEY (id) ) - Ankit Agrawal
@User 创建表user(ID serial,name varchar); - mohangraj
1
为什么不能使用insert into user("Name") values('usr4')这样的语句呢?如果你在INSERT中指定了列名(无论如何都应该这样做),那么serial列将按预期工作。 - mu is too short
1个回答

7
使用内置的数据类型serialbigserial
create table users (
  id serial primary key,
  name varchar(100) not null unique -- ?
);

命名列;省略序列或bigserial列的名称。

insert into users (name) values ('usr4');

一般规则是在INSERT语句中的每个列都必须提供一个值。如果您不指定列名,则必须为每个列提供一个值,包括“Id”,并且必须按表中列出现的顺序提供这些值。
如果您指定列名,则可以省略具有默认值和可空列,并且可以以任何顺序放置列名。值的顺序必须与您指定的列名的顺序相匹配。请注意保留HTML标记。

有没有不指定列名的方法? - mohangraj
不是你想要的方式。详细的回答。 - Mike Sherrill 'Cat Recall'

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