制約のプロパティ

制約のプロパティは、 CREATE TABLE または ALTER TABLE コマンドの CONSTRAINT 句で指定されます。

このトピックの内容:

ANSI SQL 制約のプロパティ

すべての制約のプロパティ

ANSI SQL 標準の次の制約プロパティは、すべての制約(一意、主キー、外部キー)に適用されます。

ENFORCED | NOT ENFORCED

トランザクションで制約を強制するるかどうかを指定します。 NOT NULL は 、Snowflakeによって強制される 唯一の 制約です。 参照整合性制約 をご参照ください。

DEFERRABLE | NOT DEFERRABLE

後続のトランザクションで、トランザクションの終了まで制約のチェックを延期できるかどうかを指定します。

INITIALLY { DEFERRED | IMMEDIATE }

DEFERRABLE 制約の場合、次のトランザクションから制約のチェックを延期するかどうかを指定します。

標準の制約プロパティのデフォルトは次のとおりです。

NOT ENFORCED DEFERRABLE INITIALLY DEFERRED

外部キー制約のプロパティのみ

次の制約プロパティも ANSI SQL 標準のものですが、外部キーにのみ適用されます。

MATCH { FULL | PARTIAL | SIMPLE }

1つ以上の列の NULL 値に関して、外部キーが満たされるかどうかを指定します。

UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

外部キーの主/一意キーが更新されたときに実行されるアクションを指定します。

DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

外部キーの主/一意キーが削除されたときに実行されるアクションを指定します。

外部キー制約のプロパティのデフォルトは次のとおりです。

MATCH FULL UPDATE NO ACTION DELETE NO ACTION

拡張制約のプロパティ

次のプロパティは ANSI SQL 標準の一部ではありませんが、他のデータベースとの互換性のためにサポートされています。これらはすべての制約(一意キー、主キー、外部キー)に適用されます。

ENABLE | DISABLE

制約を有効にするか無効にするかを指定します。これらのプロパティは、Oracleとの互換性のために提供されています。

デフォルトでは、この制約プロパティは DISABLE に設定されています。

VALIDATE | NOVALIDATE

制約が作成されたときに、テーブル上の既存のデータを検証するかどうかを指定します。ENABLE | DISABLE プロパティと組み合わせてのみ使用されます。

デフォルトでは、この制約プロパティは NOVALIDATE に設定されています。

RELY | NORELY

クエリの書き換え中に NOVALIDATE モードの制約を考慮するかどうかを指定します。

デフォルトでは、この制約プロパティは NORELY に設定されています。

テーブル内のデータが制約に準拠していることを確認した場合は、これを RELY に変更して、クエリオプティマイザーは、テーブル内のデータが制約に準拠することを期待する必要があることを示すことができます。これを設定すると、クエリのパフォーマンスを向上させることができます。

主キー制約と外部キー制約の場合は、このプロパティを主キー制約と外部キー制約の両方に設定します。例:

ALTER TABLE table_with_primary_key ALTER CONSTRAINT a_primary_key_constraint RELY;
ALTER TABLE table_with_foreign_key ALTER CONSTRAINT a_foreign_key_constraint RELY;

ENABLE および VALIDATE 制約プロパティのデフォルト以外の値

他のデータベースと構文の互換性を保つために、Snowflakeは制約プロパティにデフォルト以外の値を指定することをサポートしています。

ただし、新しい制約を作成するときに ENABLE または VALIDATE (こうしたプロパティのデフォルト以外の値)を指定すると、 制約は作成されません。これは、 RELY には適用されません。 RELY を指定すると、新しい制約が作成されます。

Snowflakeには、制約の作成中にデフォルト以外の値を指定するとエラーが発生するかどうかを指定するセッションパラメーター UNSUPPORTED_DDL_ACTION が用意されています。