このセクションでは、の仕組みを理解します。 PostgreSQLシリアル 疑似型。これにより次のことを定義できます。 自動インクリメント列 テーブルで。そして、私たちも見ています 例 の PostgreSQL シリアル擬似型 。
PostgreSQL シリアル擬似型とは何ですか?
PostgreSQL には、次のように呼ばれる特定の種類のデータベース オブジェクト ジェネレーターがあります。 シリアル に慣れています 整数のシーケンスを作成する として頻繁に使用される 主キー テーブルの中。
シーケンスは、 SERIAL擬似型 , 次のコマンドでわかるように、新しいテーブルを作成しています。
CREATE TABLE table_name( ID SERIAL );
PostgreSQL は、次のことを行います。 SERIAL擬似型 に ID カラム:
- まず、PostgreSQL はシーケンス オブジェクトを作成し、シーケンスによって作成される次の値を特定の列の事前定義値として確立します。
- その後、PostgreSQL は NOT NULL 制約 に ID列 シーケンスは常に次のような整数を生成するため、 NULL 以外の値 。
- 最後に、PostgreSQL はシーケンスの所有者を ID列。 出力として、テーブルまたは ID列 落とされる。
注: 以下の両方のコマンドは互いに似ているため、両方のコマンドを使用してシリアル擬似タイプを指定できます。
CREATE TABLE table_name( ID SERIAL );
CREATE SEQUENCE table_name_ID_seq; CREATE TABLE table_name ( ID integer NOT NULL DEFAULT nextval('table_name_ID_seq') ); ALTER SEQUENCE table_name_ID_seq OWNED BY table_name.ID;
の PostgreSQL シリアル擬似型 大きく分けて以下の3種類に分類されます。
次の表には、すべてのものが含まれています。 シリアル擬似型 PostgreSQL でサポートされている仕様:
名前 | ストレージサイズ | 範囲 |
---|---|---|
小シリアル | 2バイト | 1 ~ 32767 |
シリアル | 4バイト | 1 ~ 2147483647 |
ビッグシリアル | 8バイト | 1 ~ 9223372036854775807 |
PostgreSQLのシリアル擬似型の構文
PostgreSQLの構文 シリアル擬似型 次のように:
variable_name SERIAL
PostgreSQLのSERIAL型の例
どのように機能するかを理解するために、さまざまな例を見てみましょう。 PostgreSQL シリアル擬似型が動作する 。
Javaの配列リストを並べ替える
注: SERIAL 型は間接的に列にインデックスを作成したり、列を主キー列にしたりしないため、SERIAL 列に PRIMARY KEY 制約を定義できます。
CREATE コマンドを使用して新しいテーブルを 1 つ作成し、INSERT コマンドを使用していくつかの値を挿入します。
以下の例では、 作成する を生成するコマンド 車 テーブルに 組織データベース:
ナターシャ・ダラル
CREATE TABLE Cars( Car_id SERIAL PRIMARY KEY, Car_name VARCHAR NOT NULL, Car_model VARCHAR NOT NULL );
出力
の 車 以下のスクリーンショットに示すように、上記のコマンドを実行するとテーブルが正常に作成されました。
一度 車 テーブルが生成されたら、INSERT コマンドを使用してテーブルに値を挿入できます。そして、私たちは使うことができます デフォルト INSERT コマンドのキーワードを使用するか、列名を省略します。 (車ID) 。
INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera');
出力
上記のコマンドを実装すると、次のメッセージが表示され、値が正常に挿入されました。 車 テーブル:
または の使用 デフォルトのキーワード 列名を使用して (車ID):
INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8');
出力
上記のコマンドを実装すると、次のメッセージが表示されます。値は正常に挿入されました。 車 テーブル:
上のスクリーンショットでわかるように、PostgreSQL は 2 行を 車 のテーブル 車ID 列の値は 1と2 。
を作成して挿入した後、 車 テーブルの値には、 選択する コマンドは、 車 テーブル:
職員選考委員会の意味
SELECT * FROM Cars;
出力
上記のコマンドを正常に実装すると、次の結果が得られます。
使用できます pg_get_serial_sequence() のシーケンス名を取得する関数 シリアル 以下の構文でわかるように、指定されたテーブルの列。
pg_get_serial_sequence('table_name','column_name')
を入手するには、 現在の価値 シーケンスによって作成されたシーケンス名を currval() 関数に渡すことができます。
次の例では、 currval() によって生成された現在の値を返す関数 車 テーブル Car_id_seq 物体:
SELECT currval(pg_get_serial_sequence('Cars', 'car_id'));
出力
上記のコマンドを実装すると、次の出力が得られます。
使用できます 戻りの Car_id テーブルに新しい行を挿入するときにシーケンスによって作成された値を取得したい場合は、INSERT コマンドに句を追加します。
スプリングブートアーキテクチャ
次のコマンドは、新しい行を 車 テーブルに対して生成されたレコードを返します。 車ID カラム。
INSERT INTO Cars(Car_name,Car_model) VALUES('Jaguar', 'XK') RETURNING Car_id;
出力
上記のコマンドを実行すると、次の出力が得られます。 車ID として 3 :
注記:
- 上記で理解したように、 シーケンスジェネレータ 操作はトランザクションセーフではありません。これは、各ユーザーが異なる値を取得することを意味します。 2 つの並列データベースの場合 接続はシーケンスから次の値を取得しようとします。
- そして、そのユーザーのシーケンス番号はアイドル状態になり、シーケンスにギャップが生じます。 1 人のユーザーがトランザクションをロールバックできる 。
例2
を学ぶためにもう 1 つの例を見てみましょう シリアル擬似型 詳細に。
そこで、別の新しいテーブルを作成します。 野菜 CREATE コマンドを使用してテーブルを同様のテーブルに作成します。 データベース あれは 組織 とともに Veg_id 列として シリアル 疑似タイプ。
CREATE TABLE Vegetables( Veggie_id SERIAL PRIMARY KEY, Veggie_name VARCHAR NOT NULL, Veggie_seasons VARCHAR NOT NULL );
出力
の 野菜 以下のスクリーンショットに示すように、上記のコマンドを実行するとテーブルが正常に作成されました。
一度 野菜 テーブルが生成されたら、INSERT コマンドを使用してテーブルに値を挿入し、 野菜ID 以下のコマンドに示すように列を作成します。
Java if else ステートメント
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring');
出力
上記のコマンドを実装すると、次のメッセージが表示されます。値は正常に挿入されました。 野菜 テーブル。
または、 デフォルト キーワードを使用し、 野菜ID 次のコマンドに示すように列を作成します。
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter');
出力
上記のコマンドを実行すると、以下のメッセージが表示されます。これは、どちらかを使用できることを示しています。 デフォルトのキーワード または 列名を無視する とすると、同様の出力が得られます。
したがって、さらにいくつかの値を追加します。 車 次のコマンドを使用してテーブルを確認します。
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Jalapeno Peppers','Fall'), ('Cucumbers','Summer'), ('Winter Squash','Winter'), ('Snow Peas','Spring'), ('Black Radish','All seasons'), ('Pumpkin','Fall');
出力
上記のコマンドを実行すると、値が正常に挿入されたことを示す以下のメッセージが表示されます。 野菜 テーブル。
を作成して挿入した後、 野菜 テーブルの値には、 選択する のすべての行を返すコマンド 野菜 テーブル:
SELECT * FROM Vegetables;
出力
上記のコマンドを正常に実装すると、次の出力が得られます。
概要
の中に PostgreSQL シリアル擬似型 このセクションでは、主にシリアル疑似タイプの機能を学習しました。 自動増加 特定のテーブルの列の値。