it-swarm.com.de

Einfügen eines Datensatzes in eine Tabelle mit einer mit der Funktion SERIAL deklarierten Spalte

Meine Datenbank verwendet PostgreSQL. Eine Tabelle verwendet das Makro serial Auto-Increment. Wenn ich einen Datensatz in die Tabelle einfügen möchte, muss ich diesen Wert noch angeben, oder er wird mir automatisch zugewiesen? 

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)
);
39
AntiGMO

Verwenden Sie das Schlüsselwort DEFAULT oder indem Sie die Spalte aus der Liste INSERT weglassen:

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

INSERT INTO dataset (age, name, description)
VALUES (42, 'fred', 'desc');
67
Craig Ringer

Wenn Sie eine Tabelle mit einer seriellen Spalte erstellen, wenn Sie die serielle Spalte auslassen, wenn Sie Daten in die Tabelle einfügen, verwendet PostgreSQL die Sequenz automatisch und behält die Reihenfolge bei.

Beispiel: 

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)
5
francs

Diese Abfrage funktioniert für mich:

insert into <table_name> (all columns without id serial)
select (all columns without id serial)
 FROM <source> Where <anything>;
0
Hiram Walker