Clausola ADD CONSTRAINT (Databricks SQL)

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Aggiunge una chiave primaria informativa , una chiave esterna informativa o un vincolo check applicato a una tabella Delta Lake esistente.

Sintassi

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition ) [ ENFORCED ]

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [, ...] ) [ 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 }

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

  • check_constraint

    Definisce un vincolo CHECK per una tabella Delta Lake.

    • CONSTRAINTNome

      Specifica un nome per il vincolo. Il nome deve essere univoco all'interno della tabella. Se non viene specificato alcun nome, Azure Databricks ne genererà uno.

    • CHECK (Condizione)

      condition deve essere un'espressione deterministica che restituisce un valore BOOLEAN.

      condition può essere composto da valori letterali, identificatori di colonna all'interno della tabella e funzioni o operatori SQL predefiniti, ad eccezione di:

      Inoltre condition , non deve contenere alcuna sottoquery.

      Affinché un vincolo CHECK venga soddisfatto in Azure Databricks, deve restituire true.

      Delta Lake verifica la validità del vincolo CHECK sui dati nuovi ed esistenti. Se una riga esistente viola il vincolo verrà generato un errore.

  • key_constraint

    Importante

    Questa funzionalità è disponibile in anteprima pubblica.

    Definisce una chiave primaria informativa o un vincolo di chiave esterna informativa per una tabella Delta Lake.

    • CONSTRAINTNome

      Specifica facoltativamente 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 [, ...] ) constraint_option

      Aggiunge un vincolo di chiave primaria alla tabella Delta Lake. Una tabella può avere al massimo una chiave primaria.

      I vincoli di chiave primaria non sono supportati per le tabelle nel hive_metastore catalogo.

    • key_column

      Colonna della tabella oggetto definita come NOT NULL. I nomi delle colonne non devono essere ripetuti.

    • FOREIGN KEY ( foreign_key_column [, ...] ) REFERENCES parent_table [ ( parent_column [, ...] ) ] foreign_key_option

      Aggiunge un vincolo di chiave esterna (integrità referenziale) alla tabella Delta Lake.

      I vincoli di chiave esterna non sono supportati per le tabelle nel hive_metastore catalogo.

      • foreign_key_column

        Colonna della tabella oggetto. 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 di parent_columns. Due chiavi esterne non possono condividere un set identico di colonne di chiave esterna.

      • parent_table

        Specifica la tabella a cui fa riferimento la chiave esterna. La tabella deve avere un vincolo definito PRIMARY KEY ed è necessario essere proprietari di tale tabella.

      • parent_column

        Colonna nella tabella padre che fa parte della relativa chiave primaria. Tutte le colonne chiave primaria della tabella padre devono essere elencate.

        Se le colonne padre non sono elencate, sono implicite da specificare nell'ordine specificato nella PRIMARY KEY definizione.

      I vincoli di chiave esterna che differiscono solo per la permutazione delle colonne di chiave esterna non sono consentiti.

    • 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

        Azure Databricks non sfrutta il vincolo per riscrivere una query.

    • 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 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.

Esempio

-- 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
> 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;

-- Add a check contraint
> ALTER TABLE pets ADD CONSTRAINT pets_name_not_cute_chk CHECK (length(name) < 20);