制約の作成¶
制約は、テーブル作成時に 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> ]
inline_constraint
構文の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご覧ください。
アウトライン制約の作成¶
次のアウトライン構文は複数列制約で使用する必要がありますが、単一列制約にも使用できます。
CREATE [ OR REPLACE ] TABLE <name> ( ... , [ <outofline_constraint> ], ... )
ALTER TABLE <name> ADD <outofline_constraint>
outofline_constraint
構文の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご覧ください。
CREATE TABLE での制約 ... LIKE および CLONE¶
Snowflakeは、 CREATE TABLE を使用したテーブルのコピーの作成をサポートしています。
空のコピーを作成するには、 CREATE TABLE ... LIKE を使用します。
クローンを作成するには、 CREATE TABLE ... CLONE を使用します。
さらに、スキーマまたはデータベースがクローンされると、テーブルのコピーが自動的に作成されます。
テーブルのコピーが作成される方法にかかわらず、元のテーブルの制約もコピーされます。参照テーブル(外部キーテーブル)と被参照テーブル(主キーテーブル)で外部キーをコピーすると、次の状況が発生する場合があります。
両方のテーブルが同じコマンドでコピーされた場合(スキーマまたはデータベースのクローンの作成中など)、新しい参照テーブルと被参照テーブルの間に新しい外部キーが作成されます。
参照テーブルだけがコピーされた場合、参照テーブルに新しい外部キーが作成され、その外部キーは被参照テーブルとして元の主キーテーブルを指します。
被参照テーブルのみがコピーされる場合、主/一意キーはコピーされますが、新しい外部キーは作成されません。
その結果、参照テーブルと被参照テーブルを別々にコピーする場合は、手動で新しい外部キーを作成するか、新しい外部キー用に主キーテーブルを手動で変更する必要があります。