klauzule CONSTRAINT
Platí pro: Databricks SQL
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.
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 [...] ] |
{ FOREIGN KEY ( foreign_key_column [, ...] )
REFERENCES parent_table [ ( parent_column [, ...] ) ]
[ foreign_key_option | constraint_option ] [...]
}
}
}
Pomocí klauzule column_constraint
definujte omezení specifická 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 uvést ENABLE NOVALIDATE
místo NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parametry
CONSTRAINT
JménoVolitelně 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:
Databricks SQL
Databricks Runtime 11.3 LTS a vyšší
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
.-
Sloupec tabulky subjektu nebo materializovaného zobrazení Názvy sloupců se nesmí opakovat.
TIMESERIES
Platí pro:
Databricks SQL
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 ] [...]
FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
platí pro:
Databricks SQL
Databricks Runtime 11.3 LTS a vyšší
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.
-
Sloupec tabulky předmětu 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čtuparent_column
s. Dva cizí klíče nemohou sdílet stejnou sadu sloupců cizího klíče. -
Určuje tabulku nebo materializované zobrazení, na které cizí klíč odkazuje. Tabulka musí mít definované omezení
PRIMARY KEY
a pro tabulku musíte mít oprávněníSELECT
. -
Sloupec, který je součástí primárního klíče v nadřazené tabulce nebo materializovaném zobrazení. Všechny sloupce primárního klíče 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
neboRELY
Platí pro:
Databricks SQL
Databricks Runtime 14.2 a vyšší pro
PRIMARY KEY
omezeníplatí pro:
Databricks SQL zaškrtněte políčko Ano
Databricks Runtime 15.4 a vyšší pro omezení
FOREIGN KEY
Pokud
RELY
, azure Databricks může 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
.
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 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);