Condividi tramite


Clausola ADD CONSTRAINT

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

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 [ 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 }

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.

    • CONSTRAINT name

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

    • CHECK ( condition)

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

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

      Inoltre, condition non deve contenere alcuna sottoquery.

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

      Delta Lake verifica la validità del vincolo CHECK sia per i dati nuovi che per i dati esistenti. Se una riga esistente viola il vincolo, verrà generato un errore.

  • key_constraint

    Importante

    Questa funzionalità è disponibile in anteprima pubblica.

    Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 11.3 LTS e versioni successive

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

    • CONSTRAINT name

      Facoltativamente, 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:segno di spunta sì solo catalogo Unity

      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.

    • TIMESERIES

      Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 13.3 LTS e versioni successive

      Facoltativamente, etichetta il componente della colonna chiave primaria come che rappresenta un timeeries.

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

      Si applica a:segno di spunta sì solo catalogo Unity

      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 dell'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 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 disporre del SELECT privilegio per la tabella.

      • parent_column

        Colonna nella tabella padre che fa parte della 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.

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

    • 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 oppure RELY

        Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 14.2 e versioni successive per PRIMARY KEY i vincoli

        Si applica a:contrassegnato sì Databricks SQL contrassegnato sì Databricks Runtime 15.4 e versioni successive per vincoli 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 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

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