2012-10-11 14 views
33

Moja baza danych używa PostgreSQL. Jedna tabela używa makra auto-inkrementującego serial. Jeśli chcę wstawić rekord do tabeli, czy nadal muszę określić tę wartość, czy jest ona automatycznie dla mnie przypisana?Wstawianie rekordu do tabeli z kolumną zadeklarowaną przy użyciu funkcji 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) 
); 

Odpowiedz

57

Używanie słowa kluczowego DEFAULT lub przez pominięcie kolumnę z listy INSERT:

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

INSERT INTO dataset (age, name, description) 
VALUES (42, 'fred', 'desc'); 
+0

Dzięki, że pomogło! – parsecer

+0

oba te style nie działają dla mnie. Próbowałem również z Wstaw do wartości table_name() –

+0

@MuhammadNouman Następnie dostajesz coś złego lub to, co używasz nie jest PostgreSQL. Opublikuj nowe pytanie. Umieść link w nim wskazując na kontekst, jeśli chcesz. –

5

Jeśli utworzyć tabelę z kolumną szeregowego wtedy, jeśli pominąć kolumnę seryjnego podczas wstawiania danych do tabela PostgreSQL użyje sekwencji automatycznie i zachowa zamówienie.

Przykład:

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) 
Powiązane problemy