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 |
{ RELY | 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 […] =適用対象: Databricks SQL Databricks Runtime 11.3 LTS 以上 Unity Catalog のみ
テーブルまたは具体化されたビューに情報主キー制約を追加します。 テーブルまたは具体化されたビューには、最大で 1 つの主キーを含めることができます。
主キー列は暗黙的に
NOT NULL
として定義されます。主キー制約は、
hive_metastore
カタログ内のテーブルではサポートされていません。-
サブジェクト テーブルまたは具体化されたビューの列。 列名を繰り返してはなりません。
TIMESERIES
適用対象: Databricks SQL Databricks Runtime 13.3 LTS 以上
必要に応じて、主キー列コンポーネントに時系列を表すラベルを付けます。
-
PRIMARY KEY [ constraint_option ] [...]
前のキー列定義を使用して、テーブルまたは具体化されたビューに単一列の主キー制約を追加します。
この
column_constraint
はtable_constraint
と同じですPRIMARY KEY (key_column) [ constraint_option ] [...]
FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
適用対象: Databricks SQL Databricks Runtime 11.3 LTS 以上 Unity Catalog のみ
テーブルまたは具体化されたビューに情報外部キー (参照整合性) 制約を追加します。
外部キー制約は、
hive_metastore
カタログ内のテーブルではサポートされていません。外部キー列の順列のみが異なる外部キー制約は許可されません。
-
サブジェクト テーブルまたは具体化されたビューの列。 列名を繰り返してはなりません。 各列のデータ型は対応する
parent_column
のデータ型と一致する必要があります。 列の数はparent_column
の数と一致する必要があります。 2 つの外部キーは、同一の外部キー列セットを共有できません。 -
外部キーが参照するテーブルまたは具体化されたビューを指定します。 テーブルには定義された
PRIMARY KEY
制約が必要であり、テーブルに対するSELECT
権限が付与されている必要があります。 -
主キーの一部である親テーブルまたは具体化されたビュー内の列。 親テーブルまたは具体化されたビューのすべての主キー列を一覧表示する必要があります。
親列が一覧にない場合、それらは
PRIMARY KEY
定義で指定された順序で指定されます。 FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option
前の外部キー列定義を使用して、テーブルまたは具体化されたビューに単一列の外部キー制約を追加します。
この
column_constraint
はtable_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
またはRELY
適用対象: Databricks SQL Databricks Runtime 14.2 以上 (
PRIMARY KEY
制約の場合)適用対象: Databricks Runtime 15.4 以上 (
FOREIGN KEY
制約の場合)RELY
の場合、Azure Databricks は制約を利用してクエリを書き換える可能性があります。 制約が満たされていることを確認するのはユーザーの責任です。 満たされていない制約に依存すると、クエリ結果が正しくなくなる場合があります。既定値は、
NORELY
です。
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);