構文:
自動インクリメントの主キーを作成するための一般的な構文は次のとおりです。
>>CREATE TABLE table_name(( idシリアル)。;
ここで、CREATETABLE宣言をさらに詳しく見てみましょう。
- PostgreSQLは最初にシリーズエンティティを生成します。シリーズの次の値を生成し、それをフィールドのデフォルトの参照値として設定します。
- シリーズは数値を生成するため、PostgreSQLは暗黙の制限NOTNULLをidフィールドに適用します。
- idフィールドは、シリーズのホルダーとして割り当てられます。 idフィールドまたはテーブル自体を省略した場合、シーケンスは破棄されます。
自動インクリメントの概念を理解するには、このガイドの図を続行する前に、PostgreSQLがシステムにマウントおよび構成されていることを確認してください。デスクトップからPostgreSQLコマンドラインシェルを開きます。作業するサーバー名を追加します。それ以外の場合は、デフォルトのままにします。作業するサーバーにあるデータベース名を記述します。変更したくない場合は、デフォルトのままにしておきます。テストデータベースを使用するので、それを追加しました。デフォルトのポート5432で作業することもできますが、変更することもできます。最後に、選択したデータベースのユーザー名を指定する必要があります。変更したくない場合は、デフォルトのままにしておきます。選択したユーザー名のパスワードを入力し、キーボードからEnterキーを押して、コマンドシェルの使用を開始します。
データ型としてSERIALキーワードを使用する:
テーブルを作成するとき、通常、プライマリ列フィールドにキーワードSERIALを追加しません。これは、INSERTステートメントの使用中に主キー列に値を追加する必要があることを意味します。ただし、テーブルの作成中にクエリでキーワードSERIALを使用する場合、値を挿入するときにプライマリ列の値を追加する必要はありません。それを見てみましょう。
例01:
idとnameの2つの列を持つテーブルTestを作成します。列IDは、そのデータ型がSERIALであるため、主キー列として定義されています。一方、列名はTEXT NOTNULLデータ型として定義されます。以下のコマンドを試してテーブルを作成すると、下の画像に示すように、テーブルが効率的に作成されます。
>>CREATETABLEテスト(( idシリアル主キー、名前TEXT NOT NULL)。;
新しく作成したテーブルTESTの列名にいくつかの値を挿入してみましょう。列IDに値を追加しません。以下に説明するように、INSERTコマンドを使用して値が正常に挿入されたことを確認できます。
>>テストに挿入((名前)。値((「アクサ」)。、((「リムシャ」)。、(('氏族長')。;
テーブル「テスト」のレコードを確認する時が来ました。コマンドシェルで以下のSELECT命令を試してください。
>>選択する*FROMテスト;以下の出力から、列IDに指定したデータ型SERIALのために、INSERTコマンドから値を追加していなくても、列IDにいくつかの値が自動的に含まれていることがわかります。これは、データ型SERIALがそれ自体でどのように機能するかです。
例02:
SERIALデータ型列の値を確認する別の方法は、INSERTコマンドでRETURNINGキーワードを使用することです。以下の宣言は、テストテーブルに新しい行を作成し、idフィールドの値を生成します。
>>テストに挿入((名前)。値((「ハッサム」)。戻るid;
SELECTクエリを使用してテーブルTestのレコードを確認すると、画像に表示されている次の出力が得られました。 5番目のレコードが効率的にテーブルに追加されました。
>>選択する*FROMテスト;
例03:
上記の挿入クエリの代替バージョンは、DEFAULTキーワードを使用しています。 INSERTコマンドで列ID名を使用し、VALUESセクションでその値としてDEFAULTキーワードを指定します。以下のクエリは、実行時に同じように機能します。
>>テストに挿入((id、 名前)。値((デフォルト、「レース」)。;
次のようにSELECTクエリを使用してテーブルをもう一度確認しましょう。
>>選択する*FROMテスト;以下の出力からわかるように、列IDがデフォルトでインクリメントされている間に、新しい値が追加されています。
例04:
SERIAL列フィールドのシーケンス番号は、PostgreSQLのテーブルにあります。これを実現するには、メソッドpg_get_serial_sequence()を使用します。 currval()関数をpg_get_serial_sequence()メソッドと一緒に使用する必要があります。このクエリでは、関数pg_get_serial_sequence()のパラメーターでテーブル名とそのSERIAL列名を指定します。ご覧のとおり、テーブルTestと列IDを指定しています。このメソッドは、以下のクエリ例で使用されます。
>>カーバルを選択((pg_get_serial_sequence(('テスト'、 'id')。)。;currval()関数は、シーケンスの最新の値である5を抽出するのに役立つことに注意してください。次の図は、パフォーマンスがどのように見えるかを示しています。
結論:
このガイドチュートリアルでは、SERIAL疑似型を使用してPostgreSQLで自動インクリメントする方法を示しました。 PostgreSQLのシリーズを使用すると、自動インクリメントの数値セットを簡単に作成できます。イラストを参考にして、表の説明にSERIALフィールドを適用できることを願っています。