PostgreSQL SERIAL自己増分列の作成
2753 ワード
PostgreSQL SERIAL自己増分列の作成
この文書では、PostgreSQL SERIALについて説明し、serialタイプを使用してテーブルの自己増分列を作成する方法を示します.
PostgreSQL SERIAL擬似タイプ
PostgreSQLシーケンスは、整数シーケンスデータベースオブジェクトを生成するために特別なものです.シーケンスは通常、mysqlのAUTO_とプライマリ・キー列に使用されます.INCREMENTの概念は似ている.テーブルの作成時にserial擬似タイプを使用してシーケンスを定義します.
ID列にserial疑似タイプを割り当てます.PostgreSQLでは、次の手順に従います.シーケンスオブジェクトを作成し、次の生成値をカラムのデフォルト値として設定します. は、シーケンスが常に整数値を生成しnull値にならないため、対応するカラムにNOT NULL制約を追加します. は、シーケンスの所有者にid列を付与するため、id列またはテーブルが削除されると、シーケンスオブジェクトが自動的に削除される.
バックグラウンド実行文に対応:
次の文を実行したことに相当します.
PostgreSQLは、SMALLSERIAL、SERIAL、BIGSERIALの3つのシーケンス擬似タイプを提供し、対応範囲は以下の通りです.
Name
Storage Size
Range
SMALLSERIAL
2 bytes
1 to 32,767
SERIAL
4 bytes
1 to 2,147,483,647
BIGSERIAL
8 bytes
1 to 922,337,2036,854,775,807
PostgresQL SERIAL例
特に、serialカラムは、カラムにインデックスまたはプライマリ・キー・カラムを暗黙的に作成しません.もちろん、PRIMARY KEYキーワードを使用して、対応する制約を簡単に追加できます.次の文はfruitsテーブルを作成します.idクラスはserialタイプです.
Insert文では、対応するカラムを無視したりdefaultキーワードを使用したりしてserialに値を割り当てることができます.例を参照してください.
または、
PostgreSQLはfruitsテーブルに2行のレコードを挿入し、idの値は1と2です.
pg_の使用get_serial_sequence関数はserial列のシーケンス名を取得します.
現在生成されている値は、currval関数にシーケンス名を入力することで取得できます.たとえば、次の文は、最近生成された値を返します.
結果を返します.
Insert文が実行されると、シーケンス生成の値を取得したい場合は、insert文でRETURNING id句を使用して実装できます.次の文は、新しいレコードの行を挿入し、id列で生成された値を返します.
結果は次のとおりです.
シーケンス・ジェネレータはトランザクション・セキュリティではありません.つまり、2つの同時データベース接続がシーケンスから次の値を取得しようとすると、クライアントごとに異なる値が得られます.クライアントがトランザクションをロールバックすると、シーケンス値が破棄され、シーケンス値が不連続になります.
まとめ
本稿では、serialデータ型を使用して、データテーブルに自己増分列を作成する方法について説明します.
この文書では、PostgreSQL SERIALについて説明し、serialタイプを使用してテーブルの自己増分列を作成する方法を示します.
PostgreSQL SERIAL擬似タイプ
PostgreSQLシーケンスは、整数シーケンスデータベースオブジェクトを生成するために特別なものです.シーケンスは通常、mysqlのAUTO_とプライマリ・キー列に使用されます.INCREMENTの概念は似ている.テーブルの作成時にserial擬似タイプを使用してシーケンスを定義します.
CREATE TABLE table_name(
id SERIAL
);
ID列にserial疑似タイプを割り当てます.PostgreSQLでは、次の手順に従います.
バックグラウンド実行文に対応:
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は、SMALLSERIAL、SERIAL、BIGSERIALの3つのシーケンス擬似タイプを提供し、対応範囲は以下の通りです.
Name
Storage Size
Range
SMALLSERIAL
2 bytes
1 to 32,767
SERIAL
4 bytes
1 to 2,147,483,647
BIGSERIAL
8 bytes
1 to 922,337,2036,854,775,807
PostgresQL SERIAL例
特に、serialカラムは、カラムにインデックスまたはプライマリ・キー・カラムを暗黙的に作成しません.もちろん、PRIMARY KEYキーワードを使用して、対応する制約を簡単に追加できます.次の文はfruitsテーブルを作成します.idクラスはserialタイプです.
CREATE TABLE fruits(
id SERIAL PRIMARY KEY,
name VARCHAR NOT NULL
);
Insert文では、対応するカラムを無視したりdefaultキーワードを使用したりしてserialに値を割り当てることができます.例を参照してください.
INSERT INTO fruits(name) VALUES('orange');
または、
INSERT INTO fruits(id,name) VALUES(DEFAULT,'apple');
PostgreSQLはfruitsテーブルに2行のレコードを挿入し、idの値は1と2です.
SELECT *
FROM fruits;
id | name
----+--------
1 | apple
2 | orange
(2 rows)
pg_の使用get_serial_sequence関数はserial列のシーケンス名を取得します.
pg_get_serial_sequence('table_name','column_name')
現在生成されている値は、currval関数にシーケンス名を入力することで取得できます.たとえば、次の文は、最近生成された値を返します.
SELECT currval(pg_get_serial_sequence('fruits', 'id'));
結果を返します.
currval
---------
2
(1 row)
Insert文が実行されると、シーケンス生成の値を取得したい場合は、insert文でRETURNING id句を使用して実装できます.次の文は、新しいレコードの行を挿入し、id列で生成された値を返します.
INSERT INTO fruits(name) VALUES('banana')
RETURNING id;
結果は次のとおりです.
id
----
3
(1 row)
シーケンス・ジェネレータはトランザクション・セキュリティではありません.つまり、2つの同時データベース接続がシーケンスから次の値を取得しようとすると、クライアントごとに異なる値が得られます.クライアントがトランザクションをロールバックすると、シーケンス値が破棄され、シーケンス値が不連続になります.
まとめ
本稿では、serialデータ型を使用して、データテーブルに自己増分列を作成する方法について説明します.