在 postgresql 中生成自动 ID
Generate auto ID in postgresql
用户Table:
ID Name
1 usr1
2 usr2
3 usr3
在上面table中,ID是主键。我的要求是在将数据插入 table 时,我只想指定
名称如 INSERT INTO user VALUES('usr4')
。执行查询后,有没有办法自动为'usr4'创建ID?
我尝试使用串行数据类型。为此,我们还必须指定关键字 default,如 INSERT INTO user VALUES(default,'usr4')
。那么,有什么办法可以做到像INSERT INTO user VALUES('usr4')
。注意:ID 应该是唯一的。
使用内置数据类型 serial
或 bigserial
。
create table users (
id serial primary key,
name varchar(100) not null unique -- ?
);
为列命名;省略 serial 或 bigserial 列的名称。
insert into users (name) values ('usr4');
一般规则是您必须为 INSERT 语句中使用的每一列提供一个值。如果不指定列名,则必须为每一列提供一个值,包括 "Id",并且必须按照列在 table 中出现的顺序提供它们。
如果指定列名,则可以省略具有默认值的列和可为空的列,并且可以按任意顺序放置列名。值的顺序必须与您指定的列名的顺序相匹配。
用户Table:
ID Name
1 usr1
2 usr2
3 usr3
在上面table中,ID是主键。我的要求是在将数据插入 table 时,我只想指定
名称如 INSERT INTO user VALUES('usr4')
。执行查询后,有没有办法自动为'usr4'创建ID?
我尝试使用串行数据类型。为此,我们还必须指定关键字 default,如 INSERT INTO user VALUES(default,'usr4')
。那么,有什么办法可以做到像INSERT INTO user VALUES('usr4')
。注意:ID 应该是唯一的。
使用内置数据类型 serial
或 bigserial
。
create table users (
id serial primary key,
name varchar(100) not null unique -- ?
);
为列命名;省略 serial 或 bigserial 列的名称。
insert into users (name) values ('usr4');
一般规则是您必须为 INSERT 语句中使用的每一列提供一个值。如果不指定列名,则必须为每一列提供一个值,包括 "Id",并且必须按照列在 table 中出现的顺序提供它们。
如果指定列名,则可以省略具有默认值的列和可为空的列,并且可以按任意顺序放置列名。值的顺序必须与您指定的列名的顺序相匹配。