制約の変更

制約が作成されたら、次の方法で変更できます。

  • 制約の名前を変更できます。

  • RELYなど、一部のプロパティを変更できます。

  • DEFERRABLEなど、一部のプロパティは変更できません。これらのプロパティを変更するには、制約を削除して再度作成する必要があります。

  • 新しい列の追加、既存列の削除、列の順序変更などの、制約の列定義は変更できません。これらのタイプの変更を行うには、制約を削除して再度作成する必要があります。

制約を変更するとき、制約名または制約定義の列と制約タイプのいずれかを使用して、制約を識別します。各テーブルには1つのPRIMARY KEYしか持てないため、主キーはPRIMARY KEYキーワードを使用して識別することもできます。

テーブルの名前の変更や、テーブルを別のテーブルと交換するなどにより制約のあるテーブルが変更された場合、変更が反映されて制約が更新されます。

制約の名前の変更

ALTER TABLE コマンドに次の構文を使用して、制約の名前を変更します。

ALTER TABLE <table_name> RENAME CONSTRAINT <old_name> TO <new_name>;

制約のプロパティの変更

ALTER TABLE コマンドに次の構文を使用して、制約のプロパティを変更します。

ALTER TABLE <table_name>
  { ALTER | MODIFY } {
      CONSTRAINT <name>
    | PRIMARY KEY
    | { UNIQUE | FOREIGN KEY } (<column_name>, [ ... ] )
  }
  { [ [ NOT ] ENFORCED ] [ VALIDATE | NOVALIDATE ] [ RELY | NORELY ] };

CHECK制約の場合、 constraint_name は必須です。また、CHECK制約に関連付けられた expr は変更できません。expr を変更するには、CHECK制約を削除して再度作成する必要があります。

現在、Snowflakeは次の制約プロパティの設定のみをサポートしています。

  • [ NOT ] ENFORCED

  • NOVALIDATE および VALIDATE

  • RELY および NORELY

SnowflakeはENFORCEDの設定をサポートしていません。 Snowflakeは、CHECK制約に対してNOVALIDATEの設定のみをサポートしています。 ENABLE と VALIDATE プロパティのデフォルト以外の値 もご参照ください。

制約プロパティの説明については、 制約のプロパティ をご覧ください。

制約のあるテーブルの変更

制約のあるテーブルの名前が変更されると、テーブルの制約とテーブルを参照するFOREIGN KEY制約が更新され、新しい名前が参照されます。

同様に、テーブルが別のテーブル、既存のテーブルと交換された場合、テーブルのすべての制約は交換されたテーブルで維持されます。

テーブルの名前の変更またはテーブルの交換の詳細については、 ALTER TABLE をご覧ください。