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)
);
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');
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)
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>;