CONSTRAINT 句

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

重要

この機能はパブリック プレビュー段階にあります。

情報主キーまたは情報外部キーを CREATE TABLE または CREATE MATERIALIZED VIEW ステートメントの一部として追加します。

Delta Lake テーブルに CHECK 制約を追加するには、テーブルの作成後に ALTER TABLE を使用します。

構文

table_constraint 句を使用して、複数の列にまたがる制約を定義するか、構文を列定義から分離します。

table_constraint
   { [ CONSTRAINT name ]
     { PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
       { FOREIGN KEY ( foreign_key_column [, ...] )
         REFERENCES parent_table [ ( parent_column [, ...] ) ]
         [ foreign_key_option | constraint_option ] [...]
       }
     }
   }

column_constraint 句を使用して、1 つの列定義に固有の制約を定義します。

column_constraint
  { [ CONSTRAINT name ]
    { PRIMARY KEY [ constraint_option ] [...] |
      { [ FOREIGN KEY ]
        REFERENCES parent_table [ ( parent_column [, ...] ) ]
        [ foreign_key_option | constraint_option ] [...]
      }
    }
  }
constraint_option
    { NOT ENFORCED |
      DEFERRABLE |
      INITIALLY DEFERRED |
      NORELY }

foreign_key_option
    { MATCH FULL |
      ON UPDATE NO ACTION |
      ON DELETE NO ACTION }

標準以外の SQL 言語との互換性を確保するために、NOT ENFORCED DEFERRABLE INITIALLY DEFERRED の代わりに ENABLE NOVALIDATE を指定できます。

パラメーター

  • CONSTRAINT name

    必要に応じて、制約の名前を指定します。 名前は、スキーマ内で一意である必要があります。 名前が指定されていない場合は、Azure Databricks によって生成されます。

  • PRIMARY KEY ( key_column [ TIMESERIES ] [, …] ) [ constraint_option […] ]

    適用対象:check marked yes Databricks SQL Databricks Runtime 11.3 LTS 以降 Unity Catalog のみ

    テーブルまたは具体化されたビューに情報主キー制約を追加します。 テーブルまたは具体化されたビューには、最大で 1 つの主キーを含めることができます。

    主キー列は暗黙的に NOT NULL として定義されます。

    主キー制約は、hive_metastore カタログ内のテーブルではサポートされていません。

    • key_column

      サブジェクト テーブルまたは具体化されたビューの列。 列名を繰り返してはなりません。

    • TIMESERIES

      適用対象:check marked yes Databricks SQL Databricks Runtime 13.3 LTS 以降

      必要に応じて、主キー列コンポーネントに時系列を表すラベルを付けます。

  • PRIMARY KEY [ constraint_option ] [...]

    前のキー列定義を使用して、テーブルまたは具体化されたビューに単一列の主キー制約を追加します。

    この column_constrainttable_constraint と同じです

    PRIMARY KEY (key_column) [ constraint_option ] [...]

  • FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option

    適用対象:check marked yes Databricks SQL Databricks Runtime 11.3 LTS 以降 Unity Catalog のみ

    テーブルまたは具体化されたビューに情報外部キー (参照整合性) 制約を追加します。

    外部キー制約は、hive_metastore カタログ内のテーブルではサポートされていません。

    外部キー列の順列のみが異なる外部キー制約は許可されません。

    • foreign_key_column

      サブジェクト テーブルまたは具体化されたビューの列。 列名を繰り返してはなりません。 各列のデータ型は対応する parent_column のデータ型と一致する必要があります。 列の数は parent_column の数と一致する必要があります。 2 つの外部キーは、同一の外部キー列セットを共有できません。

    • parent_table

      外部キーが参照するテーブルまたは具体化されたビューを指定します。 テーブルには定義された PRIMARY KEY 制約が必要であり、そのテーブルまたは具体化されたビューを所有している必要があります。

    • parent_column

      主キーの一部である親テーブルまたは具体化されたビュー内の列。 親テーブルまたは具体化されたビューのすべての主キー列を一覧表示する必要があります。

      親列が一覧にない場合、それらは PRIMARY KEY 定義で指定された順序で指定されます。

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      前の外部キー列定義を使用して、テーブルまたは具体化されたビューに単一列の外部キー制約を追加します。

      この column_constrainttable_constraint と同じです

      FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

  • constraint_option

    制約のプロパティを一覧表示します。 すべてのプロパティは省略可能ですが、既定では暗黙的に指定されます。 各プロパティは、最大 1 回指定できます。

    • NOT ENFORCED

      Azure Databricks で、既存または新規の行にそれを適用するためのアクションは実行されません。

    • DEFERRABLE

      制約の適用は延期できます。

    • INITIALLY DEFERRED

      制約の適用は延期されます。

    • NORELY

      Azure Databricks で、クエリを書き換えるために制約は利用されません。

  • foreign_key_option

    外部キー制約に固有のプロパティを一覧表示します。 すべてのプロパティは省略可能ですが、既定では暗黙的に指定されます。 各プロパティは、最大 1 回指定できます。

    • MATCH FULL

      制約を true と見なすには、すべての列の値が NOT NULL である必要があります。

    • ON UPDATE NO ACTION

      親の PRIMARY KEY が更新された場合、Azure Databricks で、更新の制限や外部キーの更新を行うためのアクションは実行されません。

    • ON DELETE NO ACTION

      親の行が削除された場合、Azure Databricks で、アクションの制限、外部キーの更新、依存行の削除を行うためのアクションは実行されません。

重要

Azure Databricks で、主キーまたは外部キーの制約は適用されません。 主キーまたは外部キーを追加する前に、キー制約を確認します。 取り込みプロセスによってこのような保証が提供される場合があります。または、データに対してチェックを実行することもできます。

-- Create a table with a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING,
                       CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name));

-- create a table with a foreign key
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING,
                    CONSTRAINT pets_persons_fk FOREIGN KEY (owner_first_name, owner_last_name) REFERENCES persons);

-- Create a table with a single column primary key and system generated name
> CREATE TABLE customers(customerid STRING NOT NULL PRIMARY KEY, name STRING);

-- Create a table with a names single column primary key and a named single column foreign key
> CREATE TABLE orders(orderid BIGINT NOT NULL CONSTRAINT orders_pk PRIMARY KEY,
                      customerid STRING CONSTRAINT orders_customers_fk REFERENCES customers);