2016-04-21 12 views
2

私はフロントエンド開発者としての仕事で私の最初の数ヶ月後にバックエンドの開発に就き始めました。私はpostgreSQLと一緒に働いていて、nextval()関数の周りに私の頭を包んでいるようには見えません。私はこれを読んだが、それは私には分かりません。 http://www.postgresql.org/docs/current/interactive/functions-sequence.html nexval()のメリット/ユースケースは何ですか?postgresql nextval()

答えて

11

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は素敵な構文を提供していますこれのための砂糖:

あなたのINSERT文をロールバックまたは2つの異なるセッションからの同時実行文を実行した場合でも、返されること

INSERT 
INTO mytable (value) 
VALUES (1), 
     (2); -- you can omit id, it will get filled for you. 

注:

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 

と同等であり、このように使用することができます

CREATE TABLE mytable (id BIGSERIAL PRIMARY KEY, value INT); 

シーケンス値は決して同じではなく、決して再利用されることはありません(CYCLEの下の文書の細かい部分を読んでください)。

プライマリキーのすべての値がテーブル内で一意に生成されることを確認できます。

関連する問題