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 controllo constraint a una Delta Lake table, usare ALTER TABLE dopo che il table è stato creato.
Sintassi
Usare la clausola table_constraint
per definire vincoli che si estendono su più columns o per separare la sintassi dalla definizione di 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 ] [...]
}
}
}
Usare la clausola column_constraint
per definire vincoli specifici di una singola definizione di 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 }
Per la compatibilità con i dialetti SQL non standard, è possibile specificare ENABLE NOVALIDATE
anziché NOT ENFORCED DEFERRABLE INITIALLY DEFERRED
.
Parameters
CONSTRAINT
nameFacoltativamente, specifica un nome per il constraint. All'interno del schema, il nome deve essere univoco. Se non viene specificato alcun nome, Azure Databricks ne generate uno.
PRIMARY KEY
( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive solo Unity Catalog
Aggiunge una chiave primaria informativa constraint alla vista table o materializzata. Una vista table o materializzata può avere al massimo una chiave primaria.
Le chiavi primarie columns sono definite implicitamente come
NOT NULL
.I vincoli di chiave primaria non sono supportati per tables nel
hive_metastore
catalog.-
Un column del soggetto table o una vista materializzata. I nomi Column non devono essere ripetuti.
TIMESERIES
Si applica a: Databricks SQL Databricks Runtime 13.3 LTS e versioni successive
Opzionalmente, etichetta il componente column della chiave primaria come rappresentazione di una serie temporale.
-
PRIMARY KEY [ constraint_option ] [...]
Aggiunge una singola chiave primaria columnconstraint alla vista table o materializzata, usando la definizione di chiave column 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 Runtime 11.3 LTS e versioni successive solo Unity Catalog
Aggiunge una chiave esterna informativa (integrità referenziale) constraint alla vista table o materializzata.
I vincoli di chiave esterna non sono supportati per tables nel
hive_metastore
catalog.Non sono consentiti vincoli di chiave esterna che differiscono solo per la permutazione della chiave esterna columns.
-
Un column del soggetto table o una vista materializzata. I nomi Column non devono essere ripetuti. Il tipo di dati di ogni column deve corrispondere al tipo di
parent_column
corrispondente. Il numero di columns deve corrispondere al numero diparent_column
s. Due chiavi esterne non possono condividere un set identico di una chiave esterna columns. -
Specifica la table o la vista materializzata a cui fa riferimento la chiave esterna. L'table deve avere un
PRIMARY KEY
constraintdefinito ed è necessario disporre del privilegio diSELECT
per l'table. -
Un column nella vista principale table o vista materializzata che fa parte della sua chiave primaria. È necessario elencare tutte le chiavi primarie della vista padre columns o materializzata table.
Se i genitori columns non sono elencati, essi sono specificati secondo l'ordine fornito nella definizione di
PRIMARY KEY
. FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option
Aggiunge una singola chiave esterna columnconstraint alla vista materializzata table o alla vista semplice, usando la definizione di chiave esterna column 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 constraint può essere posticipata.
INITIALLY DEFERRED
Constraint l'imposizione è 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 potrebbe sfruttare il constraint per riscrivere le query. È responsabilità dell'utente assicurarsi che il constraint sia soddisfatto. L'uso di un constraint 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 constraint venga considerato vero, tutte le columnvalues devono essere
NOT NULL
.ON UPDATE NO ACTION
Se il
PRIMARY KEY
padre viene aggiornato, Azure Databricks non esegue alcuna azione per limitare il update o il update della chiave esterna.ON DELETE NO ACTION
Se la riga padre viene eliminata, Azure Databricks non esegue alcuna azione per limitare l'azione, update 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);