ADD CONSTRAINT 子句
適用於: Databricks SQL Databricks Runtime
將參考主鍵、參考外鍵或強制執行的檢查條件約束新增至現有的 Delta Lake 數據表。
語法
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
{ FOREIGN KEY (foreign_key_column [, ...] )
REFERENCES parent_table [ ( parent_column [, ...] ] )
[ constraint_option | foreign_key_option ] [...]
}
}
constraint_option
{ NOT ENFORCED |
DEFERRABLE |
INITIALLY DEFERRED |
{ NORELY | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
若要與非標準 SQL 方言相容,您可以指定 ENABLE NOVALIDATE
而不是 NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
。
參數
check_constraint
定義 Delta Lake 數據表的檢查條件約束。
CONSTRAINT
name指定條件約束的名稱。 該名稱在資料表內必須是唯一的。 如果未提供任何名稱,Azure Databricks 將會產生一個名稱。
CHECK (
condition)
condition
必須是傳回的BOOLEAN
決定性表達式。condition
可能由常值、資料表內的資料行識別碼以及確定性內建 SQL 函式或運算子組成,但下列函式除外:condition
也不得包含任何子查詢。CHECK
若要在 Azure Databricks 中滿足條件約束,它必須評估為true
。Delta Lake 會針對新的和現有的數據驗證檢查條件約束的有效性。 如果有任何現有的數據列違反條件約束,就會引發錯誤。
key_constraint
重要
這項功能處於公開預覽狀態。
適用於: Databricks SQL Databricks Runtime 11.3 LTS 和更新版本
定義 Delta Lake 數據表的資訊主鍵或參考外鍵條件約束。
CONSTRAINT
name選擇性地指定條件約束的名稱。 名稱在架構內必須是唯一的。 如果未提供任何名稱,Azure Databricks 將會產生一個名稱。
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
適用於:僅限 Unity Catalog
將主鍵條件約束新增至 Delta Lake 數據表。 數據表最多可以有一個主鍵。
目錄中的
hive_metastore
數據表不支援主鍵條件約束。-
主旨資料表的數據行,定義為
NOT NULL
。 數據行名稱不得重複。 TIMESERIES
適用於: Databricks SQL Databricks Runtime 13.3 LTS 和更新版本
選擇性地將主鍵數據列元件標記為代表時間範圍。
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
適用於:僅限 Unity Catalog
將外鍵(引用完整性)條件約束新增至 Delta Lake 數據表。
目錄中的
hive_metastore
數據表不支援外鍵條件約束。-
主旨數據表的數據行。 數據行名稱不得重複。 每個數據行的數據類型必須符合相符
parent_column
的 型別。 數據行數目必須符合的數目parent_columns
。 兩個外鍵無法共用一組相同的外鍵數據行。 -
指定外鍵所參考的數據表。 數據表必須具有已定義的
PRIMARY KEY
條件約束,而且您必須擁有SELECT
數據表的許可權。 -
父數據表中的數據行,屬於其主鍵的一部分。 父數據表的所有主鍵數據行都必須列出。
如果未列出父數據行,則會以定義中指定的
PRIMARY KEY
順序來指定它們。
不允許只有外鍵數據行排列不同之外鍵條件約束。
-
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 不會強制執行主鍵或外鍵條件約束。 新增主鍵或外鍵之前,請先確認索引鍵條件約束。 您的擷取程式可能會提供這類保證,或者您可以針對您的資料執行檢查。
範例
-- Add a primary key
> CREATE TABLE persons(first_name STRING NOT NULL, last_name STRING NOT NULL, nickname STRING);
> ALTER TABLE persons ADD CONSTRAINT persons_pk PRIMARY KEY(first_name, last_name);
-- Add a foreign key which Databricks does not enforce, but can rely upon.
> CREATE TABLE pets(name STRING, owner_first_name STRING, owner_last_name STRING);
> ALTER TABLE pets ADD CONSTRAINT pets_persons_fk
FOREIGN KEY(owner_first_name, owner_last_name) REFERENCES persons
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);