Klauzule CONSTRAINT

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

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

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

Syntaxe

table_constraint Klauzule slouží k definování omezení, která zahrnují více sloupců nebo oddělují syntaxi od definice sloupce.

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 ] [...]
       }
     }
   }

Klauzule column_constraintslouží k definování omezení specifických pro definici jednoho sloupce.

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 }

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

Parametry

  • CONSTRAINTJmé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: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 11.3 LTS a vyšší zaškrtnutí označeného ano pouze katalog Unity

    Přidá omezení informačního primárního klíče 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 hive_metastore klíče nejsou podporována pro tabulky v katalogu.

    • key_column

      Sloupec tabulky předmětu nebo materializovaného zobrazení Názvy sloupců se nesmí opakovat.

    • TIMESERIES

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného 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 do tabulky nebo materializovaného zobrazení pomocí předchozí definice klíčového sloupce.

    To column_constraint odpovídá table_constraint

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

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

    Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 11.3 LTS a vyšší zaškrtnutí označeného 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 hive_metastore klíče nejsou podporována pro tabulky v katalogu.

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

    • foreign_key_column

      Sloupec tabulky předmětu nebo materializovaného zobrazení Názvy sloupců se nesmí opakovat. Datový typ každého sloupce se musí shodovat s typem odpovídajícího parent_columnsloupce . Počet sloupců musí odpovídat počtu parent_columns. Dva cizí klíče nemůžou sdílet identickou sadu sloupců cizího klíče.

    • parent_table

      Určuje tabulku nebo materializované zobrazení cizího klíče odkazuje na. Tabulka musí mít definované PRIMARY KEY 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. Všechny sloupce primárního klíče nadřazené tabulky nebo materializovaného zobrazení musí být uvedené.

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

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Přidá omezení cizího klíče s jedním sloupcem do tabulky nebo materializovaného zobrazení pomocí předchozí definice sloupce cizího klíče.

      To column_constraint odpovídá table_constraint

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

  • constraint_option

    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 neprosadí žádnou akci k vynucování pro existující nebo nové řádky.

    • DEFERRABLE

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

    • INITIALLY DEFERRED

      Vynucení omezení je odloženo.

    • NORELY nebo RELY

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 14.2 a vyšší pro PRIMARY KEY omezení

      Platí pro: zaškrtnutí označeného ano Databricks Runtime 15.4 a vyšší pro FOREIGN KEY omezení

      Pokud RELYmůže Azure Databricks omezení zneužít k přepsání 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.

      Výchozí hodnota je NORELY.

  • foreign_key_option

    Zobrazí 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 NOT NULLvšechny hodnoty sloupců .

    • ON UPDATE NO ACTION

      Pokud se nadřazený objekt PRIMARY KEY aktualizuje, Azure Databricks neprodá žádnou akci, která by omezila aktualizaci nebo aktualizovala cizí klíč.

    • 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 omezení primárního klíče ani cizího klíče. Před přidáním primárního nebo cizího klíče 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);