Condividi tramite


clausola CONSTRAINT

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì 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 vincolo CHECK a una tabella Delta Lake, usare ALTER TABLE dopo la creazione della tabella.

Sintassi

Utilizzare la clausola table_constraint 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 clausola column_constraintper 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 nome

    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:contrassegnato con un segno di spunta Databricks SQL contrassegnato con un segno di spunta Databricks Runtime 11.3 LTS e versioni successive contrassegnato con un segno di spunta Unity Catalog

    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 catalogo hive_metastore.

    • key_column

      Colonna della tabella del soggetto o della vista materializzata. 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

      Opzionalmente etichetta il componente della colonna chiave primaria come rappresentante una serie temporale.

  • 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 a table_constraint

    PRIMARY KEY (key_column) [ constraint_option ] [...]

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

    Si applica a:contrassegnato con un segno di spunta Databricks SQL contrassegnato con un segno di spunta Databricks Runtime 11.3 LTS e versioni successive contrassegnato con un segno di spunta Unity Catalog

    Aggiunge un vincolo di integrità referenziale (chiave esterna) informativo alla tabella o vista materializzata.

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

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

    • colonna_chiave_esterna

      Colonna della tabella del soggetto o della vista materializzata. 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_column. Due chiavi esterne non possono condividere un set identico di colonne di chiavi esterne.

    • parent_table

      Specifica la tabella o la vista materializzata 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 o nella vista materializzata che costituisce parte della 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 indicato nella definizione di PRIMARY KEY.

    • 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 a table_constraint

      FOREIGN KEY ( foreign_key_column ) REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

  • opzione_vincolo

    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 a per i vincoli di FOREIGN KEY

      Se RELY, Azure Databricks può sfruttare il vincolo per riscrivere e ottimizzare 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. Le ottimizzazioni delle query associate al comando richiedono che le query vengano eseguite su un calcolo abilitato per Photon. Vedi Che cos'è Photon?.

      Il valore predefinito è NORELY.

  • opzione_chiave_esterna

    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

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