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 di controllo 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 possono essere costituiti 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 di CHECK 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 un vincolo informativo di chiave primaria o informativo di chiave esterna 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:con spunta su sì 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 catalogo hive_metastore.

    • 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 rappresentante una timeseries.

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

      Si applica a:segno di spunta contrassegnato come 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 catalogo hive_metastore.

      • foreign_key_column

        Colonna della tabella del soggetto. I nomi delle colonne non devono essere ripetuti. Il tipo di dati di ogni colonna deve corrispondere al tipo di parent_columncorrispondente. 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 PRIMARY KEY definito ed è necessario disporre del privilegio SELECT nella 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, si considera che siano specificate nell'ordine dato nella definizione di PRIMARY KEY.

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

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