Sdílet prostřednictvím


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 CREATE TABLE nebo CREATE MATERIALIZED VIEW příkazu.

Chcete-li přidat kontrolu constraint do Delta Lake table, použijte ALTER TABLE po vytvoření table.

Syntaxe

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

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 jednu definici column.

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 NOVALIDATENOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parameters

  • CONSTRAINT Jméno

    Volitelně lze určit název pro constraint. Název musí být jedinečný v rámci schema. Pokud není zadaný žádný název, Azure Databricks ho generate.

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

    platí pro:zaškrtněte zaškrtněte Databricks SQL zaškrtněte Databricks Runtime 11.3 LTS a vyšší zaškrtněte Unity jenom

    Přidá informační primární klíč constraint do table nebo materializovaného zobrazení. Zobrazení table nebo materializované zobrazení může mít maximálně jeden primární klíč.

    Primární klíč columns je implicitně definován jako NOT NULL.

    Omezení primárního klíče nejsou podporována pro tables v hive_metastorecatalog.

    • key_column

      column předmětu table nebo materializovaného zobrazení. Column názvy se nesmějí 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čí primární klíč column komponentu jako reprezentaci časové řady.

  • PRIMARY KEY [ constraint_option ] [...]

    Přidá jeden column primární klíč constraint do table nebo materializovaného zobrazení pomocí předchozí definice klíče column.

    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škrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 11.3 LTS a vyšší zaškrtnuto ano pouze Catalog Unity

    Přidá cizí klíč pro informační účely (referenční integritu) constraint do table nebo do materializovaného zobrazení.

    Omezení cizího klíče nejsou podporována pro tables v hive_metastorecatalog.

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

    • foreign_key_column

      column předmětu table nebo materializovaného zobrazení. Column názvy se nesmí opakovat. Datový typ každého column musí odpovídat typu odpovídajícího parent_column. Počet columns musí odpovídat počtu parent_columns. Dva cizí klíče nemohou sdílet identický set cizího klíče columns.

    • parent_table

      Určuje table nebo materializované zobrazení, na které cizí klíč odkazuje. table musí mít definovanou PRIMARY KEYconstrainta pro tablemusíte mít oprávnění SELECT .

    • parent_column

      column v nadřazeném table nebo materializovaném zobrazení, které je součástí jeho primárního klíče. Všechny primární klíče columns nadřazeného table nebo materializovaného zobrazení musí být uvedené.

      Pokud nejsou uvedeny nadřazené prvky columns, jsou určeny podle pořadí daného v definici PRIMARY KEY.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Přidá jeden column cizí klíč constraint do table nebo materializovaného zobrazení, přičemž využije stávající definici cizího klíče column.

      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í constraint je možné odložit.

    • INITIALLY DEFERRED

      Constraint vynucení 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: Databricks SQL zaškrtněte políčko Ano zaškrtněte políčko Ano Databricks Runtime 15.4 a vyšší pro omezení FOREIGN KEY

      Pokud RELY, azure Databricks může zneužít constraint k přepsání dotazů. Je zodpovědností uživatele zajistit, aby constraint byla splněna. Spoléhat se na constraint, který není splněn, 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 constraint považováno za pravdivé, musí všechny columnvalues být NOT NULL.

    • ON UPDATE NO ACTION

      Pokud se nadřazený PRIMARY KEY aktualizuje, Azure Databricks neuskutečí žádnou akci k omezení update nebo update cizího klíče.

    • ON DELETE NO ACTION

      Pokud je nadřazený řádek odstraněn, Azure Databricks nepodnikne žádnou akci, aby omezil tuto akci, update cizí klíč, ani neodstraní závislý řádek.

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