制約のプロパティ¶
制約のプロパティは、 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
に変更して、クエリオプティマイザーは、テーブル内のデータが制約に準拠することを期待する必要があることを示すことができます。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 が用意されています。