将记录插入到具有使用SERIAL函数声明的列的表中

Ant*_*GMO 44 database postgresql

我的数据库正在使用PostgreSQL.一个表使用serial自动增量宏.如果我想在表中插入记录,是否仍需要指定该值,还是会自动为我分配?

CREATE TABLE dataset
(
    id serial NOT NULL,
    age integer NOT NULL,
    name character varying(32) NOT NULL,
    description text NOT NULL DEFAULT ''::text
    CONSTRAINT dataset_pkey PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

Cra*_*ger 75

使用DEFAULT关键字或省略INSERT列表中的列:

INSERT INTO dataset (id, age, name, description)
VALUES (DEFAULT, 42, 'fred', 'desc');

INSERT INTO dataset (age, name, description)
VALUES (42, 'fred', 'desc');
Run Code Online (Sandbox Code Playgroud)

  • @MuhammadNouman那么你就出错了或者你使用的不是PostgreSQL。请发布一个新问题。如果您愿意,可以在其中添加一个指向此链接的链接以获取上下文。 (3认同)

fra*_*ncs 5

如果您创建一个带有串行列的表,那么当您将数据插入表中时省略了串行列,PostgreSQL将自动使用该序列并保持顺序.

例:

skytf=> create table test_2 (id serial,name varchar(32));
NOTICE:  CREATE TABLE will create implicit sequence "test_2_id_seq" for serial column "test_2.id"
CREATE TABLE

skytf=> insert into test_2 (name) values ('a');
INSERT 0 1
skytf=> insert into test_2 (name) values ('b');
INSERT 0 1
skytf=> insert into test_2 (name) values ('c');
INSERT 0 1

skytf=> select * From test_2;
 id | name 
----+------
  1 | a
  2 | b
  3 | c
(3 rows)
Run Code Online (Sandbox Code Playgroud)


小智 5

这些查询对我有用:

insert into <table_name> (all columns without id serial)
select (all columns without id serial)
 FROM <source> Where <anything>;
Run Code Online (Sandbox Code Playgroud)

  • “所有没有 id 序列号的列”是特殊关键字吗? (4认同)
  • @Snozzlebert 不,这只是海报的简写。基本上意味着在列列表中包含任何非串行类型的列,并且在选择列表中也是如此。 (2认同)