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.
挿入ステートメントをロールバックしたり、2つの異なるセッションから同時ステートメントを実行したりしても、返されるシーケンス値が同じになることはなく、再利用されることもありません(CYCLE
の下にあるドキュメントの詳細を読んでください)。 。
したがって、主キーのすべての値がテーブル内で一意に生成されることを確認できます。