2012-10-11 12 views
33

Il mio database utilizza PostgreSQL. Una tabella utilizza la macro di incremento automatico serial. Se voglio inserire un record nella tabella, devo ancora specificare quel valore, o è automaticamente assegnato per me?Inserimento di un record in una tabella con una colonna dichiarata con la funzione 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) 
); 

risposta

57

Utilizzando la parola DEFAULT o omettendo la colonna dall'elenco INSERT:

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

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

Grazie, che ci ha aiutato! – parsecer

+0

entrambi questi stili non funzionano per me. Ho anche provato con Insert in valori table_name() –

+0

@MuhammadNouman Quindi stai ricevendo qualcosa di sbagliato o quello che stai usando non è PostgreSQL. Si prega di inviare una nuova domanda. Metti un link in esso che punta a questo per il contesto, se vuoi. –

5

Se si crea una tabella con una colonna di serie, allora se si omette la colonna di serie quando si inseriscono dati in table PostgreSQL utilizzerà automaticamente la sequenza e manterrà l'ordine.

Esempio:

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) 
Problemi correlati