制約の作成

制約は、テーブル作成時に CREATE TABLE を使用して作成するか、 ALTER TABLE を使用して後からテーブルに追加できます。

  • 単一列制約は、列定義の一部としてインラインで作成できます。

  • 複数列制約は、制約内の列を指定する、別(アウトライン)の句で作成する必要があります。

制約を作成するには、制約の作成に使用されたロールに特定のアクセス制御権限を付与する必要があります。詳細については、 アクセス制御の要件 をご参照ください。

インライン制約の作成

次のインライン構文は、単一列制約にのみ使用できます。

CREATE [ OR REPLACE ] TABLE <name> (<column_name> <column_type> [ <inline_constraint> ] , ... )

ALTER TABLE <name> ADD COLUMN <column_name> <column_type> [ <inline_constraint> ]
Copy

inline_constraint 構文の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご覧ください。

アウトライン制約の作成

次のアウトライン構文は複数列制約で使用する必要がありますが、単一列制約にも使用できます。

CREATE [ OR REPLACE ] TABLE <name> ( ... , [ <outofline_constraint> ], ... )

ALTER TABLE <name> ADD <outofline_constraint>
Copy

outofline_constraint 構文の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご覧ください。

CREATE TABLE での制約 ... LIKE および CLONE

Snowflakeは、 CREATE TABLE を使用したテーブルのコピーの作成をサポートしています。

  • 空のコピーを作成するには、 CREATE TABLE ... LIKE を使用します。

  • クローンを作成するには、 CREATE TABLE ... CLONE を使用します。

さらに、スキーマまたはデータベースがクローンされると、テーブルのコピーが自動的に作成されます。

テーブルのコピーが作成される方法にかかわらず、元のテーブルの制約もコピーされます。参照テーブル(外部キーテーブル)と被参照テーブル(主キーテーブル)で外部キーをコピーすると、次の状況が発生する場合があります。

  • 両方のテーブルが同じコマンドでコピーされた場合(スキーマまたはデータベースのクローンの作成中など)、新しい参照テーブルと被参照テーブルの間に新しい外部キーが作成されます。

  • 参照テーブルだけがコピーされた場合、参照テーブルに新しい外部キーが作成され、その外部キーは被参照テーブルとして元の主キーテーブルを指します。

  • 被参照テーブルのみがコピーされる場合、主/一意キーはコピーされますが、新しい外部キーは作成されません。

その結果、参照テーブルと被参照テーブルを別々にコピーする場合は、手動で新しい外部キーを作成するか、新しい外部キー用に主キーテーブルを手動で変更する必要があります。