NEXTVAL
is een functie om de volgende waarde uit een reeks te halen.
Volgorde is een object dat steeds grotere aantallen retourneert, verschillend voor elke oproep, ongeacht transacties enz.
Elke keer dat u NEXTVAL
. belt , krijg je een ander nummer.
Dit wordt voornamelijk gebruikt om surrogaat primaire sleutels voor uw tabellen te genereren.
U kunt een tabel als volgt maken:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
en voeg waarden als volgt in:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
en kijk wat je krijgt:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
PostgreSQL biedt hiervoor een mooie syntax-suiker:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
wat gelijk is aan
CREATE SEQUENCE mytable_id_seq; -- table_column_'seq'
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY DEFAULT NEXTVAL('mytable_id_seq'), value INT); -- it's not null and has a default value automatically
en kan als volgt worden gebruikt:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Merk op dat zelfs als u uw insert-instructie terugdraait of gelijktijdige instructies uitvoert vanuit twee verschillende sessies, de geretourneerde reekswaarden nooit hetzelfde zullen zijn en nooit opnieuw zullen worden gebruikt (lees de kleine lettertjes in de documenten echter onder CYCLE
).
U kunt er dus zeker van zijn dat alle waarden van uw primaire sleutels uniek worden gegenereerd in de tabel.