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

    Facoltativamente, 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:contrassegnato con sì Databricks SQL contrassegnato con sì Databricks Runtime 11.3 LTS e versioni successive contrassegnato con sì 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_metastorecatalog.

    • key_column

      Un column del soggetto table o una vista materializzata. I nomi Column 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 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 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 sìSQL di Databricks contrassegnato sì Databricks Runtime 11.3 LTS e versioni successive contrassegnato sì 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_metastorecatalog.

    Non sono consentiti vincoli di chiave esterna che differiscono solo per la permutazione della chiave esterna columns.

    • foreign_key_column

      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_columncorrispondente. Il numero di columns deve corrispondere al numero di parent_columns. Due chiavi esterne non possono condividere un set identico di una chiave esterna columns.

    • parent_table

      Specifica la table o la vista materializzata a cui fa riferimento la chiave esterna. L'table deve avere un PRIMARY KEYconstraintdefinito ed è necessario disporre del privilegio di SELECT per l'table.

    • parent_column

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