約束子句(數據庫SQL)
預覽
此功能已在公共預覽.
對象的一部分添加主鍵或外鍵創建表聲明。
向Delta Lake表使用添加檢查約束ALTER TABLE在創建表之後。
語法
使用table_constraint
子句定義跨多列的約束,或將語法與列定義分離。
table_constraint{[約束的名字]{主要的關鍵(key_column[,...])[constraint_option][...]|{外國關鍵(foreign_key_column[,...])參考文獻parent_table[(parent_column[,...])][foreign_key_option|constraint_option][...]}}}
使用column_constraint
子句定義特定於單個列定義的約束。
column_constraint{[約束的名字]{主要的關鍵[constraint_option][...]|{[外國關鍵]參考文獻parent_table[(parent_column[,...])][foreign_key_option|constraint_option][...]}}}
constraint_option{不執行|可延期的|最初遞延|諾爾}foreign_key_option{匹配完整的|在更新沒有行動|在刪除沒有行動}
為了與非標準SQL方言兼容,您可以指定啟用已經
而不是不執行可延期的最初遞延
.
參數
約束的名字
可選地為約束指定名稱。名稱在模式中必須是唯一的。如果沒有提供名稱,Databricks SQL將生成一個名稱。
主鍵(key_column[,…])[constraint_option][…]
將主鍵約束添加到表中。一個表最多隻能有一個主鍵。
主鍵列隱式定義為
不零
.中的表不支持主鍵約束
hive_metastore
目錄。主題表的一列。列名不能重複。
主要的關鍵[constraint_option][…]
使用前麵的鍵列定義將單個列主鍵約束添加到表中。
這
column_constraint
等於table_constraint
主要的關鍵(key_column)[constraint_option][…]
外國關鍵(foreign_key_column[,…])參考文獻parent_table[(parent_column[,…])]foreign_key_option
向表添加外鍵(引用完整性)約束。
控件中的表不支持外鍵約束
hive_metastore
目錄。不允許隻在外鍵列的排列上有不同的外鍵約束。
主題表的一列。列名不能重複。每個列的數據類型必須與匹配的類型相匹配
parent_column
.列的數量必須與的數量匹配parent_column
s.兩個外鍵不能共享同一組外鍵列。指定外鍵引用的表。表必須有一個已定義的
主要的關鍵
約束,你必須擁有那個表。父表中的列,它是主鍵的一部分。必須列出父表的所有主鍵列。
控件中給定的順序指定父列
主要的關鍵
定義。外國關鍵參考文獻parent_table[(parent_column)]foreign_key_option
使用前麵的外鍵列定義向表添加單個列外鍵約束。
這
column_constraint
等於table_constraint
外國關鍵(foreign_key_column)參考文獻parent_table[(parent_column)]foreign_key_option
constraint_option
列出約束的屬性。所有屬性都是可選的,但默認情況下是隱含的。每個屬性最多隻能指定一次。
不執行
Databricks SQL不會對現有或新行強製執行此操作。
可延期的
約束實施可以推遲。
最初遞延
約束實施被延遲。
諾爾
Databricks SQL不利用約束重寫查詢。
foreign_key_option
列出特定於外鍵約束的屬性。所有屬性都是可選的,但默認情況下是隱含的。每個屬性最多隻能指定一次。
匹配完整的
要認為約束為真,所有列值都必須為真
不零
.在更新沒有行動
如果父
主要的關鍵
時,Databricks SQL不采取任何操作來限製更新或更新外鍵。在刪除沒有行動
如果刪除了父行,Databricks SQL將不采取任何操作來限製該操作、更新外鍵或刪除相關行。
重要的
在添加主鍵或外鍵之前確認鍵約束。你的攝入過程可以提供這樣的保證,或者你可以對你的數據進行檢查。
例子
創建一個帶有主鍵的表>創建表格人(first_name字符串不零,last_name字符串不零,昵稱字符串,約束persons_pk主要的關鍵(first_name,last_name));創建一個帶有外鍵的表>創建表格寵物(的名字字符串,owner_first_name字符串,owner_last_name字符串,約束pets_persons_fk外國關鍵(owner_first_name,owner_last_name)參考文獻人);——創建一個單列主鍵和係統生成名稱的表>創建表格beplay体育app下载地址(customerid字符串不零主要的關鍵,的名字字符串);創建一個表,其中包含一個名稱單列主鍵和一個名稱單列外鍵>創建表格訂單(orderid長整型數字不零約束orders_pk主要的關鍵,customerid字符串約束orders_beplay体育app下载地址customers_fk參考文獻beplay体育app下载地址);