ADD CONSTRAINT 子句 (Databricks SQL)

重要

這項功能處於公開預覽狀態

將主鍵、外鍵或檢查條件約束新增至現有的 Delta Lake 資料表。

語法

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition ) [ ENFORCED ]

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [, ...] ) [ 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 }

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名字

      指定條件約束的名稱。 名稱在資料表中必須是唯一的。 如果未提供任何名稱,Databricks SQL 將會產生一個名稱。

    • CHECK (條件)

      condition 必須是傳回 BOOLEAN 的決定性運算式。

      condition 可能是由常值、資料表內的資料行識別碼,以及決定性的內建 SQL 函式或運算子所組成,但下列除外:

      condition 不得包含任何 子查詢

      若要在 Azure Databricks 中滿足 CHECK 條件約束,它必須評估為 true

      Delta Lake 會針對新的和現有的資料驗證檢查條件約束的有效性。 如果任何現有的資料列違反條件約束,就會引發錯誤。

  • key_constraint

    重要

    這項功能處於公開預覽狀態

    定義 Delta Lake 資料表的主鍵或外鍵條件約束。

    需要:SQL 倉儲 2022.30 版或更高版本。 此版本可在預覽通道中使用。

    • CONSTRAINT名字

      選擇性地指定條件約束的名稱。 名稱在架構內必須是唯一的。 如果未提供任何名稱,Databricks SQL 將會產生一個名稱。

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

      將主鍵條件約束新增至 Delta Lake 資料表。 資料表最多可以有一個主要索引鍵。

      目錄中的資料表 hive_metastore 不支援主鍵條件約束。

    • key_column

      主旨資料表的資料行,定義為 NOT NULL 。 資料行名稱不得重複。

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

      將外鍵 (參考完整性) 條件約束新增至 Delta Lake 資料表。

      目錄中的 hive_metastore 資料表不支援外鍵條件約束。

      • foreign_key_column

        主旨資料表的資料行。 資料行名稱不得重複。 每個資料行的資料類型必須符合相符 parent_column 的類型。 資料行數目必須符合 的數目 parent_columns 。 兩個外鍵不能共用一組相同的外鍵資料行。

      • parent_table

        指定外鍵所參考的資料表。 資料表必須具有已定義的 PRIMARY KEY 條件約束,而且您必須擁有該資料表。

      • parent_column

        父資料表中的資料行,屬於其主鍵的一部分。 父資料表的所有主鍵資料行都必須列出。

        如果未列出父資料行,則會以定義中指定的 PRIMARY KEY 順序來指定。

      不允許只有外鍵資料行排列不同之外鍵條件約束。

    • constraint_option

      列出條件約束的屬性。 所有屬性都是選擇性屬性,但預設為隱含。 每個屬性最多可以指定一次。

      • NOT ENFORCED

        Databricks SQL 不會採取任何動作來針對現有或新的資料列強制執行它。

      • DEFERRABLE

        條件約束強制執行可以延後。

      • INITIALLY DEFERRED

        條件約束強制執行會延後。

      • NORELY

        Databricks SQL 不會利用條件約束來重寫查詢。

    • foreign_key_option

      列出外鍵條件約束特有的屬性。 所有屬性都是選擇性屬性,但預設為隱含。 每個屬性最多可以指定一次。

      • MATCH FULL

        若要將條件約束視為 true,所有資料行值都必須是 NOT NULL

      • ON UPDATE NO ACTION

        如果父系 PRIMARY KEY 更新 Databricks SQL,則不會採取任何動作來限制更新或更新外鍵。

      • ON DELETE NO ACTION

        如果刪除父資料列 Databricks SQL 不會採取任何動作來限制動作、更新外鍵或刪除相依資料列。

重要

在新增主鍵或外鍵之前,請先確認索引鍵條件約束。 您的內嵌程式可能會提供這類保證,或者您可以對資料執行檢查。

範例

-- 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
> 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;

-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);