NEXTVAL
е функция за получаване на следващата стойност от последователност.
Последователността е обект, който връща непрекъснато нарастващи числа, различни за всяко повикване, независимо от транзакции и т.н.
Всеки път, когато извиквате NEXTVAL
, получавате различен номер.
Това се използва главно за генериране на сурогатни първични ключове за вашите таблици.
Можете да създадете таблица като тази:
CREATE SEQUENCE mysequence;
CREATE TABLE mytable (id BIGINT NOT NULL PRIMARY KEY, value INT);
и вмъкнете стойности като тази:
INSERT
INTO mytable (id, value)
VALUES
(NEXTVAL('mysequence'), 1),
(NEXTVAL('mysequence'), 2);
и вижте какво получавате:
SELECT * FROM mytable;
id | value
----+-------
1 | 1
2 | 2
PostgreSQL предлага хубав синтаксис за това:
CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT);
което е еквивалентно на
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
и може да се използва по следния начин:
INSERT
INTO mytable (value)
VALUES (1),
(2); -- you can omit id, it will get filled for you.
Обърнете внимание, че дори ако върнете своя израз за вмъкване или изпълните едновременни оператори от две различни сесии, върнатите стойности на последователността никога няма да бъдат същите и никога няма да бъдат използвани повторно (прочетете дребния шрифт в документите под CYCLE
).
Така че можете да сте сигурни, че всички стойности на вашите първични ключове ще бъдат генерирани уникални в таблицата.