ADD CONSTRAINT-sats
Gäller för: Databricks SQL Databricks Runtime
Lägger till en primär informationsnyckel , informationsnyckel eller en framtvingad kontrollbegränsning i en befintlig Delta Lake-tabell.
Syntax
ADD [check_constraint | key_constraint ]
check_constraint
CONSTRAINT name CHECK ( condition ) [ ENFORCED ]
key_constraint
{ [ CONSTRAINT name ]
{
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ 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 | RELY } }
foreign_key_option
{ MATCH FULL |
ON UPDATE NO ACTION |
ON DELETE NO ACTION }
För kompatibilitet med sql-dialekter som inte är standard kan du ange ENABLE NOVALIDATE
i stället för NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parametrar
check_constraint
Definierar en kontrollbegränsning för en Delta Lake-tabell.
CONSTRAINT
NamnAnger ett namn på villkoret. Namnet måste vara unikt i tabellen. Om inget namn anges genererar Azure Databricks ett.
CHECK (
tillstånd)
condition
måste vara ett deterministiskt uttryck som returnerar ettBOOLEAN
.condition
kan bestå av literaler, kolumnidentifierare i tabellen och deterministiska, inbyggda SQL-funktioner eller operatorer förutom:- Mängdfunktioner
- Analysfönsterfunktioner
- Funktioner för rangordningsfönster
- Generatorfunktioner för tabellvärde
Får inte heller
condition
innehålla någon underfråga.För att en
CHECK
begränsning ska uppfyllas i Azure Databricks måste den utvärderas tilltrue
.Delta Lake verifierar giltigheten för kontrollbegränsningen mot både nya och befintliga data. Om en befintlig rad bryter mot villkoret genereras ett fel.
key_constraint
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Gäller för: Databricks SQL Databricks Runtime 11.3 LTS och senare
Definierar en primär informationsnyckel eller informationsnyckelbegränsning för en Delta Lake-tabell.
CONSTRAINT
NamnDu kan också ange ett namn för villkoret. Namnet måste vara unikt i schemat. Om inget namn anges genererar Azure Databricks ett.
PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]
Gäller endast för: Unity Catalog
Lägger till en primär nyckelbegränsning i Delta Lake-tabellen. En tabell kan ha högst en primärnyckel.
Primära nyckelbegränsningar stöds inte för tabeller i
hive_metastore
katalogen.-
En kolumn i ämnestabellen som definieras som
NOT NULL
. Kolumnnamn får inte upprepas. TIMESERIES
Gäller för: Databricks SQL Databricks Runtime 13.3 LTS och senare
Du kan också etikettera primärnyckelkolumnkomponenten som representerar en tidsserie.
FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Gäller endast för: Unity Catalog
Lägger till en begränsning för sekundärnyckel (referensintegritet) i Delta Lake-tabellen.
Begränsningar för sekundärnyckel stöds inte för tabeller i
hive_metastore
katalogen.-
En kolumn i ämnestabellen. Kolumnnamn får inte upprepas. Datatypen för varje kolumn måste matcha typen av matchande
parent_column
. Antalet kolumner måste matcha antaletparent_columns
. Två sekundärnycklar kan inte dela en identisk uppsättning sekundärnyckelkolumner. -
Anger tabellen som sekundärnyckeln refererar till. Tabellen måste ha en definierad
PRIMARY KEY
begränsning och du måste ha behörighetenSELECT
för tabellen. -
En kolumn i den överordnade tabellen som är en del av dess primära nyckel. Alla primärnyckelkolumner i den överordnade tabellen måste visas.
Om överordnade kolumner inte visas är de underförstådda att anges i den ordning som anges i
PRIMARY KEY
definitionen.
Begränsningar för sekundärnyckel som endast skiljer sig åt i permutationen för sekundärnyckelkolumnerna tillåts inte.
-
constraint_option
Visar en lista över egenskaperna för begränsningarna. Alla egenskaper är valfria men underförstådda som standard. Varje egenskap kan högst anges en gång.
NOT ENFORCED
Azure Databricks vidtar inga åtgärder för att framtvinga det för befintliga eller nya rader.
DEFERRABLE
Begränsningsframtvingandet kan skjutas upp.
INITIALLY DEFERRED
Begränsningsframtvingandet skjuts upp.
NORELY
ellerRELY
Gäller för: Databricks SQL Databricks Runtime 14.2 och senare för begränsningar
PRIMARY KEY
Gäller för: Databricks Runtime 15.4 och senare för begränsningar
FOREIGN KEY
Om
RELY
kan Azure Databricks utnyttja begränsningen för att skriva om frågor. Det är användarens ansvar att se till att begränsningen uppfylls. Om du förlitar dig på en begränsning som inte är uppfylld kan det leda till felaktiga frågeresultat.Standardvärdet är
NORELY
.
foreign_key_option
Visar en lista över egenskaper som är specifika för begränsningar för sekundärnyckel. Alla egenskaper är valfria men underförstådda som standard. Varje egenskap kan högst anges en gång.
MATCH FULL
För att villkoret ska betraktas som sant måste alla kolumnvärden vara
NOT NULL
.ON UPDATE NO ACTION
Om den överordnade
PRIMARY KEY
är uppdaterad vidtar Azure Databricks ingen åtgärd för att begränsa uppdateringen eller uppdatera sekundärnyckeln.ON DELETE NO ACTION
Om den överordnade raden tas bort vidtar Azure Databricks ingen åtgärd för att begränsa åtgärden, uppdatera sekundärnyckeln eller ta bort den beroende raden.
Viktigt!
Azure Databricks tillämpar inte begränsningar för primärnyckel eller sekundärnyckel. Bekräfta nyckelbegränsningar innan du lägger till en primär eller sekundärnyckel. Inmatningsprocessen kan ge sådan säkerhet, eller så kan du köra kontroller mot dina data.
Exempel
-- 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 which Databricks does not enforce, but can rely upon.
> 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
NOT ENFORCED RELY;
-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);