54

私のデータベースは PostgreSQL を使用しています。1 つのテーブルが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)
);
4

4 に答える 4

94

キーワードを使用するか、リストDEFAULTから列を省略します。INSERT

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

INSERT INTO dataset (age, name, description)
VALUES (42, 'fred', 'desc');
于 2012-10-11T09:30:45.353 に答える
6

シリアル列を持つテーブルを作成する場合、データをテーブルに挿入するときにシリアル列を省略すると、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)
于 2012-10-11T09:34:50.423 に答える