2012-10-11 45 views
33

Mi base de datos usa PostgreSQL. Una tabla usa la macro de autoincremento serial. Si deseo insertar un registro en la tabla, ¿todavía necesito especificar ese valor, o se me asignará automáticamente?Insertar un registro en una tabla con una columna declarada con la función 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) 
); 

Respuesta

57

El uso de la palabra clave DEFAULT u omitiendo la columna de la lista INSERT:

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

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

Gracias, que ayudaron! – parsecer

+0

ambos estilos no funcionan para mí. También probé con Insertar en valores de tabla_nombre() –

+0

@MuhammadNouman Entonces, estás obteniendo algo mal o lo que estás usando no es PostgreSQL. Por favor publique una nueva pregunta. Ponga un enlace en él apuntando a este para el contexto si lo desea. –

5

Si crea una tabla con una columna de serie a continuación, si se omite la columna de serie cuando se inserta datos en el La tabla PostgreSQL usará la secuencia automáticamente y mantendrá el orden.

Ejemplo:

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) 
Cuestiones relacionadas