klauzule CONSTRAINT

Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime

Přidá informační primární klíč, informační cizí klíč nebo informační jedinečné omezení jako součást CREATE TABLE příkazu nebo CREATE MATERIALIZED VIEW příkazu.

Pokud chcete přidat omezení kontroly do tabulky Delta Lake, použijte po vytvoření tabulky ALTER TABLE.

Syntaxe

Pomocí klauzule table_constraint definujte omezení, která zahrnují více sloupců nebo oddělují syntaxi od definice sloupce.

table_constraint
   { [ CONSTRAINT name ]
     { PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
       UNIQUE ( key_column [, ...] ) [ constraint_option [...] ] |
       { FOREIGN KEY ( foreign_key_column [, ...] )
         REFERENCES parent_table [ ( parent_column [, ...] ) ]
         [ foreign_key_option | constraint_option ] [...]
       }
     }
   }

Pomocí klauzule column_constraintdefinujte omezení specifická pro definici jednoho sloupce.

column_constraint
  { [ CONSTRAINT name ]
    { PRIMARY KEY [ constraint_option ] [...] |
      UNIQUE [ 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 }

Kvůli kompatibilitě s nestandardními dialekty SQL můžete uvést ENABLE NOVALIDATE místo NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parametry

  • CONSTRAINT Jméno

    Volitelně můžete určit název omezení. Název musí být v rámci schématu jedinečný. Pokud není zadaný žádný název, Azure Databricks ho vygeneruje.

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

    platí pro:označeno ano Databricks SQL označeno ano Databricks Runtime 11.3 LTS a vyšší označeno ano pouze Katalog Unity.

    Přidá primární klíč jako informativní omezení do tabulky nebo materializovaného zobrazení. Tabulkové nebo materializované zobrazení může mít maximálně jeden primární klíč.

    Sloupce primárního klíče jsou implicitně definovány jako NOT NULL.

    Omezení primárního klíče nejsou podporována pro tabulky v katalogu hive_metastore.

    • key_column

      Sloupec tabulky subjektu nebo materializovaného zobrazení Názvy sloupců se nesmí opakovat.

    • TIMESERIES

      Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime 13.3 LTS a vyšší

      Volitelně označí komponentu sloupce primárního klíče jako reprezentaci časových intervalů.

  • PRIMARY KEY [ constraint_option ] [...]

    Přidá omezení primárního klíče s jedním sloupcem k tabulce nebo materializovanému zobrazení, využívajíc předchozí definici klíčového sloupce.

    To column_constraint odpovídá table_constraint

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

  • UNIQUE ( key_column [, ...] ) [ constraint_option [...] ]

    Platí pro:check marked yes Databricks SQL check marked yes Databricks Runtime 18.2 and above check marked yes Unity Catalog only

    Přidá do tabulky informační jedinečné omezení. Tabulka může mít několik jedinečných omezení.

    Pro tabulky v hive_metastore katalogu nejsou podporována jedinečná omezení.

    Sloupce v UNIQUE omezení můžou mít hodnotu null, včetně případů, kdy je omezení odkazováno cizím klíčem. NULL hodnoty ve UNIQUE sloupcích jsou považovány za odlišné od sebe, takže duplicitní NULL hodnoty neporušují sémantiku UNIQUE omezení.

    • key_column

      Sloupec tabulky předmětu Názvy sloupců se nesmí opakovat.

  • UNIQUE [ constraint_option ] [...]

    Přidá do tabulky jedinečné omezení s jedním sloupcem pomocí předchozí definice klíčového sloupce.

    To column_constraint odpovídá table_constraint

    UNIQUE (key_column) [ constraint_option ] [...]

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

    platí pro:označeno ano Databricks SQL označeno ano Databricks Runtime 11.3 LTS a vyšší označeno ano pouze Katalog Unity.

    Přidá do tabulky nebo materializovaného zobrazení omezení informačního cizího klíče (referenční integrita).

    Omezení cizího klíče nejsou podporována pro tabulky v katalogu hive_metastore.

    Omezení cizího klíče, která se liší pouze v permutaci sloupců cizího klíče, nejsou povolena.

    • cizí_klíčový_sloupec

      Sloupec tabulky subjektu nebo materializovaného zobrazení Názvy sloupců se nesmí opakovat. Datový typ každého sloupce musí odpovídat typu odpovídajícího parent_column. Počet sloupců musí odpovídat počtu parent_columns. Dva cizí klíče nemohou sdílet stejnou sadu sloupců cizího klíče.

    • parent_table

      Určuje tabulku nebo materializované zobrazení, na které cizí klíč odkazuje. Tabulka musí mít definované PRIMARY KEY omezení nebo v Databricks Runtime 18.2 a vyšší definované UNIQUE omezení a musíte mít SELECT oprávnění k tabulce.

    • parent_column

      Sloupec v nadřazené tabulce nebo materializovaném zobrazení, který je součástí primárního klíče nebo v Databricks Runtime 18.2 a vyšší, je součástí jedinečného omezení. Všechny sloupce primárního klíče nebo jedinečné sloupce omezení nadřazené tabulky nebo materializovaného zobrazení musí být uvedeny.

      Pokud nejsou uvedeny nadřazené sloupce, jsou určeny pořadím zadaným v definici PRIMARY KEY.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Přidá omezení cizího klíče na základě jednoho sloupce do tabulky nebo materializovaného zobrazení, přičemž využije definici sloupce cizího klíče z předchozího odstavce.

      To column_constraint odpovídá table_constraint

      FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

  • možnost_omezení

    Vypíše vlastnosti omezení. Všechny vlastnosti jsou volitelné, ale implicitní ve výchozím nastavení. Každá vlastnost může být maximálně zadána jednou.

    • NOT ENFORCED

      Azure Databricks nepodniká žádné kroky týkající se existujících nebo nových řádků.

    • DEFERRABLE

      Vynucení omezení je možné odložit.

    • INITIALLY DEFERRED

      Vynucení omezení je odloženo.

    • NORELY nebo RELY

      Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 14.2 a vyšší pro PRIMARY KEY omezení

      platí pro: Databricks SQL zaškrtněte políčko Ano zaškrtněte políčko Ano Databricks Runtime 15.4 a vyšší pro omezení FOREIGN KEY

      Platí pro:check marked yes Databricks SQL check marked yes Databricks Runtime 18.2 and above for UNIQUE constraints

      Pokud RELYmůže Azure Databricks toto omezení zneužít k přepsání a optimalizaci dotazů. Je zodpovědností uživatele, aby bylo zajištěno, že omezení bude splněno. Spoléhat se na omezení, které není splněno, může vést k nesprávným výsledkům dotazu. Optimalizace dotazů přidružené k RELY příkazu vyžadují, aby se dotazy spouštěly na výpočetních prostředcích s podporou Photon. Podívejte se na co je Photon?

      Výchozí hodnota je NORELY.

  • možnost_cizího_klíče

    Zobrazuje seznam vlastností specifických pro omezení cizího klíče. Všechny vlastnosti jsou volitelné, ale implicitní ve výchozím nastavení. Každá vlastnost může být maximálně zadána jednou.

    • MATCH FULL

      Aby bylo omezení považováno za pravdivé, musí být všechny hodnoty sloupců NOT NULL.

    • ON UPDATE NO ACTION

      Pokud se nadřazený PRIMARY KEY aktualizuje, Azure Databricks neprovede žádnou akci pro omezení aktualizace ani aktualizaci cizího klíče.

    • ON DELETE NO ACTION

      Pokud je nadřazený řádek odstraněný, Azure Databricks neuskutečí žádnou akci k omezení akce, aktualizaci cizího klíče nebo odstranění závislého řádku.

Důležité

Azure Databricks nevynucuje primární klíč, cizí klíč ani jedinečná omezení. Před přidáním primárního klíče, cizího klíče nebo jedinečného omezení potvrďte omezení klíče. Váš proces ingestování může poskytnout takové záruky nebo můžete spouštět kontroly vašich dat.

Příklady

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

-- Create a table with a column unique constraint
> CREATE TABLE person_contacts(first_name STRING NOT NULL, last_name STRING NOT NULL,
                               nickname STRING UNIQUE);

-- Create a table with a multi-column unique constraint
> CREATE TABLE person_accounts(first_name STRING NOT NULL, last_name STRING NOT NULL, account_id STRING,
                               CONSTRAINT person_accounts_uq UNIQUE(first_name, last_name));

-- Create a table with a foreign key that references a unique column
> CREATE TABLE pet_tags(tag STRING NOT NULL, owner_nickname STRING,
                        CONSTRAINT pet_tags_owner_fk FOREIGN KEY (owner_nickname) REFERENCES person_contacts(nickname));