Clausola CONSTRAINT
Si applica a: Databricks SQL Databricks Runtime
Aggiunge una chiave primaria informativa o una chiave esterna informativa come parte di un'istruzione CREATE TABLE o CREATE MATERIALIZED VIEW .
Per aggiungere un vincolo CHECK a una tabella Delta Lake, utilizzare ALTER TABLE dopo la creazione della tabella.
Sintassi
Usare la table_constraint
clausola 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 column_constraint
clausola 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: Solo Databricks SQL Databricks Runtime 11.3 LTS e versioni successive al catalogo Unity
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
hive_metastore
catalogo.-
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
Facoltativamente, etichetta il componente della colonna chiave primaria come che rappresenta un timeeries.
-
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: Solo Databricks SQL Databricks Runtime 11.3 LTS e versioni successive al catalogo Unity
Aggiunge un vincolo di chiave esterna informativo (integrità referenziale) alla tabella o alla vista materializzata.
I vincoli di chiave esterna non sono supportati per le tabelle nel
hive_metastore
catalogo.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 dell'oggetto corrispondente
parent_column
. Il numero di colonne deve corrispondere al numero diparent_column
colonne. Due chiavi esterne non possono condividere un set identico di colonne chiave esterna. -
Specifica la tabella o la vista materializzata a cui fa riferimento la chiave esterna. La tabella deve avere un vincolo definito
PRIMARY KEY
ed è necessario disporre delSELECT
privilegio per la tabella. -
Colonna nella tabella padre o nella vista materializzata che fa parte della relativa 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 specificato nella
PRIMARY KEY
definizione. 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 Runtime 15.4 e versioni successive per
FOREIGN KEY
i vincoliSe
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 sia considerato true, tutti i valori di colonna devono essere
NOT NULL
.ON UPDATE NO ACTION
Se l'elemento padre
PRIMARY KEY
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);