clausola CONSTRAINT
Si applica a: Databricks SQL
Databricks Runtime
Aggiunge una chiave primaria di tipo informativo o una chiave esterna di tipo informativo come parte di un'istruzione CREATE TABLE o CREATE MATERIALIZED VIEW.
Per aggiungere un vincolo CHECK a una tabella Delta Lake, usare ALTER TABLE dopo la creazione della tabella.
Sintassi
Utilizzare la clausola table_constraint
per definire vincoli che si estendono su più colonne o per separare la sintassi dalla definizione di colonna.
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 ] [...]
}
}
}
Usare la clausola column_constraint
per definire vincoli specifici di una singola definizione di colonna.
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 }
Per la compatibilità con i dialetti SQL non standard, è possibile specificare ENABLE NOVALIDATE
anziché NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parametri
CONSTRAINT
nameFacoltativamente, specifica un nome per il vincolo. Il nome deve essere univoco all'interno dello schema. Se non viene specificato alcun nome, Azure Databricks ne genererà uno.
PRIMARY KEY
( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]Si applica a:
Databricks SQL
Databricks Runtime 11.3 LTS e versioni successive
Unity Catalog
Aggiunge un vincolo di chiave primaria informativa alla tabella o alla vista materializzata. Una tabella o una vista materializzata può avere al massimo una chiave primaria.
Le colonne chiave primaria vengono definite in modo implicito come
NOT NULL
.I vincoli di chiave primaria non sono supportati per le tabelle nel catalogo
hive_metastore
.-
Colonna della tabella oggetto o della vista materializzata. I nomi delle colonne non devono essere ripetuti.
TIMESERIES
Si applica a:
Databricks SQL
Databricks Runtime 13.3 LTS e versioni successive
Opzionalmente etichetta il componente della colonna chiave primaria come rappresentante una serie temporale.
-
PRIMARY KEY [ constraint_option ] [...]
Aggiunge un vincolo di chiave primaria a colonna singola alla tabella o alla vista materializzata, usando la definizione di colonna chiave precedente.
Questo
column_constraint
equivale atable_constraint
PRIMARY KEY (key_column) [ constraint_option ] [...]
FOREIGN KEY (foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option
Si applica a:
Databricks SQL
Databricks Runtime 11.3 LTS e versioni successive
Catalogo Unity
Aggiunge un vincolo di integrità referenziale (chiave esterna) informativo alla tabella o vista materializzata.
I vincoli di chiave esterna non sono supportati per le tabelle nel catalogo
hive_metastore
.Non sono consentiti vincoli di chiave esterna che differiscono solo per la permutazione delle colonne di chiave esterna.
-
Colonna della tabella oggetto o della vista materializzata. I nomi delle colonne non devono essere ripetuti. Il tipo di dati di ogni colonna deve corrispondere al tipo di
parent_column
corrispondente. Il numero di colonne deve corrispondere al numero diparent_column
. Due chiavi esterne non possono condividere un set identico di colonne di chiavi esterne. -
Specifica la tabella o la vista materializzata a cui fa riferimento la chiave esterna. La tabella deve avere un vincolo
PRIMARY KEY
definito ed è necessario disporre del privilegioSELECT
nella tabella. -
Colonna nella tabella padre o nella vista materializzata che costituisce parte della chiave primaria. Tutte le colonne chiave primaria della tabella padre o della vista materializzata devono essere elencate.
Se le colonne padre non sono elencate, vengono specificate in base all'ordine indicato nella definizione di
PRIMARY KEY
. FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option
Aggiunge un vincolo di chiave esterna a colonna singola alla tabella o alla vista materializzata, usando la definizione di colonna chiave esterna precedente.
Questo
column_constraint
equivale atable_constraint
FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option
-
constraint_option
Elenca le proprietà dei vincoli. Tutte le proprietà sono facoltative, ma implicite per impostazione predefinita. Ogni proprietà può essere specificata al massimo una volta.
NOT ENFORCED
Azure Databricks non esegue alcuna azione per applicarla per le righe nuove o esistenti.
DEFERRABLE
L'imposizione del vincolo può essere posticipata.
INITIALLY DEFERRED
L'imposizione dei vincoli viene posticipata.
NORELY
oppureRELY
Si applica a:
Databricks SQL
Databricks Runtime 14.2 e versioni successive per
PRIMARY KEY
i vincoliSi applica a:
Databricks SQL
Databricks Runtime 15.4 e versioni successive a per i vincoli di
FOREIGN KEY
Se
RELY
, Azure Databricks può sfruttare il vincolo per riscrivere le query. È responsabilità dell'utente assicurarsi che il vincolo sia soddisfatto. L'uso di un vincolo non soddisfatto può causare risultati di query non corretti.Il valore predefinito è
NORELY
.
foreign_key_option
Elenca le proprietà specifiche dei vincoli di chiave esterna. Tutte le proprietà sono facoltative, ma implicite per impostazione predefinita. Ogni proprietà può essere specificata al massimo una volta.
MATCH FULL
Affinché il vincolo venga considerato true, tutti i valori di colonna devono essere
NOT NULL
.ON UPDATE NO ACTION
Se il
PRIMARY KEY
padre viene aggiornato, Azure Databricks non esegue alcuna azione per limitare l'aggiornamento o aggiornare la chiave esterna.ON DELETE NO ACTION
Se la riga padre viene eliminata, Azure Databricks non esegue alcuna azione per limitare l'azione, aggiornare la chiave esterna o eliminare la riga dipendente.
Importante
Azure Databricks non applica vincoli di chiave primaria o di chiave esterna. Confermare i vincoli di chiave prima di aggiungere una chiave primaria o esterna. Il processo di inserimento può fornire tale garanzia oppure eseguire controlli sui dati.
Esempi
-- 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);