アイデンティティ列 - Amazon Aurora DSQL

アイデンティティ列

重要

ID 列を使用する場合は、キャッシュ値を慎重に検討する必要があります。詳細については、「CREATE SEQUENCE」ページの重要なコールアウトを参照してください。

ワークロードパターンに基づいて ID 列を使用する最適な方法のガイダンスについては、「シーケンスと ID 列の使用」を参照してください。

ID 列は、暗黙的なシーケンスから自動的に生成される特殊な列です。キー値の生成に使用できます。ID 列を作成するには、CREATE TABLEGENERATED ... AS IDENTITY 句を使用します。次に例を示します。

CREATE TABLE people ( id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000), ... );

または、以下を実行します。

CREATE TABLE people ( id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000), ... );

詳細については、「CREATE TABLE」を参照してください。

ID 列を持つテーブルに対して INSERT コマンドが実行され、ID 列に値が明示的に指定されていない場合、暗黙的なシーケンスによって生成された値が挿入されます。例えば、前述の定義で、追加の適切な列を想定して、次のように記述します。

INSERT INTO people (name, address) VALUES ('A', 'foo'); INSERT INTO people (name, address) VALUES ('B', 'bar');

id 列の値が 1 から始まり、次のテーブルデータが生成されます。

id | name | address ----+------+--------- 1 | A | foo 2 | B | bar

または、値の代わりにキーワード DEFAULT を指定して、シーケンス生成値を明示的にリクエストすることもできます。

INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');

同様に、キーワード DEFAULTUPDATE コマンドでも使用できます。

したがって、多くの点で、ID 列はデフォルト値を持つ列のように動作します。

列定義の ALWAYS 句と BY DEFAULT 句は、INSERT コマンドと UPDATE コマンドでユーザーが明示的に指定した値がどのように処理されるかを決定します。INSERT コマンドで ALWAYS を選択した場合、ユーザー指定の値は、INSERT ステートメントで OVERRIDING SYSTEM VALUE が指定されている場合にのみ受け入れられます。BY DEFAULT が選択されている場合、ユーザー指定の値が優先されます。したがって、BY DEFAULT を使用すると、デフォルト値に似た動作になります。デフォルト値は明示的な値で上書きできますが、ALWAYS を使用すると、明示的な値が誤って挿入されることに対する保護が強化されます。

ID 列のデータ型は、シーケンスでサポートされているデータ型のいずれかである必要があります。(「CREATE SEQUENCE」を参照してください。) 関連付けられたシーケンスのプロパティは、ID 列の作成時に指定することも (「CREATE TABLE」を参照)、後で変更することもできます (「ALTER TABLE」を参照)。

ID 列は自動的に NOT NULL とマークされます。ただし、ID 列では一意性が保証されません。(シーケンスは通常一意の値を返しますが、前述のように、シーケンスをリセットしたり、ID 列に値を手動で挿入したりすることもできます)。一意性は、PRIMARY KEY または UNIQUE 制約を使用して強制する必要があります。