CONSTRAINT 子句
適用於: Databricks SQL Databricks Runtime
加入資訊主鍵或參考外鍵做為 CREATE TABLE 或 CREATE MATERIALIZED VIEW 語句的一部分。
若要將檢查條件約束新增至 Delta Lake 數據表,請在建立數據表之後使用 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
使用 子句來定義單一數據行定義特有的條件約束。
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 方言相容,您可以指定 ENABLE NOVALIDATE
而不是 NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
。
參數
CONSTRAINT
name選擇性地指定條件約束的名稱。 名稱在架構內必須是唯一的。 如果未提供任何名稱,Azure Databricks 將會產生一個名稱。
PRIMARY KEY
(key_column [ TIMESERIES ] [, ...] )[ constraint_option [...] ]適用於:Databricks SQL Databricks Runtime 11.3 LTS 和更新版本僅限 Unity 目錄
將參考主鍵條件約束加入至數據表或具體化檢視。 數據表或具體化檢視最多可以有一個主要索引鍵。
主鍵資料列會隱含定義為
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 目錄
將參考外鍵(引用完整性)條件約束加入至數據表或具體化檢視。
目錄中的
hive_metastore
數據表不支援外鍵條件約束。不允許只有外鍵數據行排列不同之外鍵條件約束。
-
主旨數據表或具體化檢視的數據行。 數據行名稱不得重複。 每個數據行的數據類型必須符合相符
parent_column
的 型別。 數據行數目必須符合 s 的數目parent_column
。 兩個外鍵無法共用一組相同的外鍵數據行。 -
指定外鍵所參考的數據表或具體化檢視。 數據表必須具有已定義的
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
列出條件約束的屬性。 所有屬性都是選擇性屬性,但預設為隱含。 每個屬性最多可以指定一次。
NOT ENFORCED
Azure Databricks 不會採取任何動作,針對現有或新的數據列強制執行它。
DEFERRABLE
條件約束強制執行可以延遲。
INITIALLY DEFERRED
條件約束強制執行會延後。
NORELY
或RELY
適用於:適用於條件約束的
PRIMARY KEY
Databricks SQL Databricks Runtime 14.2 和更新版本適用於:適用於條件約束的 Databricks Runtime 15.4 和更新版本
FOREIGN KEY
如果
RELY
為 ,Azure Databricks 可能會利用條件約束來重寫查詢。 用戶有責任確保滿足條件約束。 依賴不符合的條件約束可能會導致查詢結果不正確。預設值為
NORELY
。
foreign_key_option
列出外鍵條件約束特有的屬性。 所有屬性都是選擇性屬性,但預設為隱含。 每個屬性最多可以指定一次。
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);