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

PostgreSQLで自動インクリメント主キーを定義する方法

    PostgreSQLのようなリレーショナルデータベースの場合、開発者の間では罪と見なされる可能性があります。 すべてのテーブルに主キーを含める。したがって、すべてのテーブルにその非常に重要な主キー列を追加するために最大限の努力をすることが重要です。ありがたいことに、Postgresはこのタスクを実行するための2つの方法を提供します。

    シリアルデータ型の使用

    Postgresで主キーを追加するための最も簡単で一般的な手法は、SERIALを使用することです。 またはBIGSERIAL CREATINGの場合のデータ型 新しいテーブル。公式ドキュメントに示されているように、SERIAL は真のデータ型ではありませんが、指定された列に対して自動インクリメントされた一意の識別子を作成するようにPostgresに指示する単なる省略表記です。

    以下に、簡単なbooksを作成します。 適切なSERIALを含むテーブル 主キーのデータ型。

    CREATE TABLE books (
      id              SERIAL PRIMARY KEY,
      title           VARCHAR(100) NOT NULL,
      primary_author  VARCHAR(100) NULL
    );
    

    idを設定するだけです SERIALとしての列 PRIMARY KEYを使用 添付されているPostgresは、すべての複雑な舞台裏の作業を処理し、idを自動的にインクリメントします INSERTごとに一意の主キー値を持つ列 。

    カスタムシーケンスの使用

    まれに、SERIALに組み込まれている標準のインクリメンタルな性質 およびBIGSERIAL データ型がニーズに合わない場合があります。このような場合、カスタムのSEQUENCEを作成することで、列に対して同じ自動インクリメントされた主キー機能を実行できます。 、古いバージョンのOracleで使用されていた方法と同様です。

    おそらく、私たちは特に偶数が好きですが、100未満のものには強い嫌悪感を持っているので、挿入ごとに100から始めて主キーを2ずつ増やすだけにします。これは、カスタムのSEQUENCEを使用して実行できます。 そのように:

    CREATE SEQUENCE books_sequence
      start 2
      increment 2;
    

    ここで、INSERT booksへの新しいレコード テーブルでは、nextval('books_sequence')を使用してシーケンスの次の値を評価する必要があります それをidとして使用します 。

    INSERT INTO books
      (id, title, primary_author)
    VALUES
      (nextval('books_sequence'), 'The Hobbit', 'Tolkien');
    

    SEQUENCES minvalueなどのオプションを使用して、必要に応じてさらにスパイスを加えることができます およびmaxvalue もちろん、極値を示し、CYCLE 、これにより、シーケンスがmaxvalueに達すると、シーケンスを「ループアラウンド」できます。 、startに戻ります 価値があり、再び登り始めます。はるかに多くの情報が公式ドキュメントにあります。


    1. MySQLデータベースに接続するときにユーザー「root」@「localhost」に対して拒否されたアクセスを解決する方法(パスワードを使用:はい)

    2. SQLテーブルの初心者向けガイド

    3. MariaDBの列にあるすべての非数値を検索する

    4. Oracleストアドプロシージャ:結果セットと出力パラメータの両方を返します