sql >> データベース >  >> RDS >> PostgreSQL

postgresqlのnextval()がどのように機能するのかわかりませんが、誰かが説明できますか?

    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の下にあるドキュメントの詳細を読んでください)。 。

    したがって、主キーのすべての値がテーブル内で一意に生成されることを確認できます。




    1. どうしてFacebookでスマート検索がこんなに速いのか

    2. DBに最後に挿入された行の値

    3. 単一のmysqlクエリで複数のテーブルを更新する方法は?

    4. SQLServerロックエスカレーション