Freigeben über


CONSTRAINT-Klausel

Gilt für: durch Häkchen mit „Ja“ markiert Databricks SQL Häkchen gesetzt ja Databricks Runtime

Fügt einen informativen Primärschlüssel oder einen informativen Fremdschlüssel als Teil einer CREATE TABLE- oder CREATE MATERIALIZED VIEW-Anweisung hinzu.

Wenn Sie einer Delta Lake-Tabelle eine CHECK-Einschränkung hinzufügen möchten, verwenden Sie ALTER TABLE, nachdem die Tabelle erstellt wurde.

Syntax

Verwenden Sie die table_constraint-Klausel, um Einschränkungen zu definieren, die mehrere Spalten umfassen, oder die Syntax von der Spaltendefinition zu trennen.

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

Verwenden Sie die column_constraint-Klausel, um spezifische Einschränkungen für eine einzelne Spaltendefinition zu definieren.

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 }

Zum Gewährleisten der Kompatibilität mit nicht standardmäßigen SQL-Dialekten können Sie ENABLE NOVALIDATE anstelle von NOT ENFORCED DEFERRABLE INITIALLY DEFERRED angeben.

Parameter

  • CONSTRAINTname

    Gibt optional einen Namen für die Einschränkung an. Der Name muss innerhalb des Schemas eindeutig sein. Wenn kein Name angegeben wird, generiert Azure Databricks einen Namen.

  • PRIMARY KEY ( key_column [ TIMESERIES ] [, …] ) [ constraint_option […] ]

    Gilt für: Häkchen ja Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime 11.3 LTS und höher Häkchen gesetzt ja Nur Unity Catalog

    Fügt der Tabellen- oder materialisierten Sicht eine informative Primärschlüsseleinschränkung hinzu. Eine Tabelle oder materialisierte Sicht darf höchstens einen Primärschlüssel haben.

    Primärschlüsselspalten werden implizit als NOT NULL definiert.

    Primärschlüsseleinschränkungen werden nicht für Tabellen im hive_metastore-Katalog unterstützt.

    • key_column

      Eine Spalte der Thementabelle oder materialisierten Sicht. Spaltennamen dürfen nicht wiederholt werden.

    • TIMESERIES

      Gilt für: Häkchen gesetzt ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 13.3 LTS und höher

      Bezeichnet optional die Komponente für Primärschlüsselspalten als Darstellung einer Zeitreihe.

  • PRIMARY KEY [ constraint_option ] [...]

    Fügt der Tabelle oder materialisierten Sicht mithilfe der vorherigen Schlüsselspaltendefinition eine Primärschlüsseleinschränkung für eine einzelne Spalte hinzu.

    Diese column_constraint entspricht der table_constraint.

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

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

    Gilt für: Häkchen ja Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime 11.3 LTS und höher Häkchen gesetzt ja Nur Unity Catalog

    Fügt der Tabelle oder materialisierten Sicht eine informative Fremdschlüsseleinschränkung (referentielle Integrität) hinzu.

    Fremdschlüsseleinschränkungen werden nicht für Tabellen im hive_metastore-Katalog unterstützt.

    Fremdschlüsseleinschränkungen, die sich nur in der Permutation der Fremdschlüsselspalten unterscheiden, sind nicht zulässig.

    • foreign_key_column

      Eine Spalte der Thementabelle oder materialisierten Sicht. Spaltennamen dürfen nicht wiederholt werden. Der Datentyp jeder Spalte muss mit dem Typ der entsprechenden parent_column übereinstimmen. Die Anzahl von Spalten muss der Anzahl von parent_columns entsprechen. Zwei Fremdschlüssel können nicht über einen identischen Satz von Fremdschlüsselspalten verfügen.

    • parent_table

      Gibt die Tabelle oder materialisierte Sicht an, auf die der Fremdschlüssel verweist. Die Tabelle muss über eine definierte PRIMARY KEY-Einschränkung verfügen, und Sie müssen die SELECT-Berechtigung für die Tabelle haben.

    • parent_column

      Eine Spalte in der übergeordneten Tabelle oder materialisierten Sicht, die Teil des Primärschlüssels ist. Alle Primärschlüsselspalten der übergeordneten Tabelle oder materialisierten Sicht müssen aufgelistet werden.

      Wenn übergeordnete Spalten nicht aufgeführt sind, werden sie anhand der Reihenfolge in der PRIMARY KEY-Definition angegeben.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Fügt der Tabelle oder materialisierten Sicht mithilfe der vorherigen Fremdschlüsselspaltendefinition eine Fremdschlüsseleinschränkung für eine einzelne Spalte hinzu.

      Diese column_constraint entspricht der table_constraint.

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

  • constraint_option

    Listet die Eigenschaften der Einschränkungen auf. Alle Eigenschaften sind optional, werden jedoch standardmäßig impliziert. Jede Eigenschaft kann höchstens einmal angegeben werden.

    • NOT ENFORCED

      Azure Databricks führt keine Aktion aus, um dies für vorhandene oder neue Zeilen zu erzwingen.

    • DEFERRABLE

      Die Erzwingung von Einschränkungen kann verzögert werden.

    • INITIALLY DEFERRED

      Die Erzwingung von Einschränkungen wird verzögert.

    • NORELY oder RELY

      Gilt für: Häkchen gesetzt ja Databricks SQL Häkchen gesetzt ja Databricks Runtime ab Version 14.2 und darüber für PRIMARY KEY-Einschränkungen

      Gilt für: Häkchen gesetzt ja Databricks Runtime 15.4 und höher für FOREIGN KEY-Einschränkungen

      Bei RELY verletzt Azure Databricks möglicherweise die Einschränkung zum Umschreiben von Abfragen. Es liegt in der Benutzerverantwortung sicherzustellen, dass die Einschränkung erfüllt ist. Die Verwendung einer Einschränkung, die nicht erfüllt ist, kann zu fehlerhaften Abfrageergebnissen führen.

      Der Standardwert ist NORELY.

  • foreign_key_option

    Listet die spezifischen Eigenschaften von Fremdschlüsseleinschränkungen auf. Alle Eigenschaften sind optional, werden jedoch standardmäßig impliziert. Jede Eigenschaft kann höchstens einmal angegeben werden.

    • MATCH FULL

      Damit die Einschränkung als „true“ gilt, müssen alle Spaltenwerte NOT NULL sein.

    • ON UPDATE NO ACTION

      Wenn der übergeordnete PRIMARY KEY aktualisiert wird, führt Azure Databricks keine Aktion aus, um die Aktualisierung einzuschränken oder den Fremdschlüssel zu aktualisieren.

    • ON DELETE NO ACTION

      Wenn die übergeordnete Zeile gelöscht wird, führt Azure Databricks keine Aktion aus, um die Aktion einzuschränken, den Fremdschlüssel zu aktualisieren oder die abhängige Zeile zu löschen.

Wichtig

Azure Databricks erzwingt keine Primärschlüssel- oder Fremdschlüsseleinschränkungen. Überprüfen und bestätigen Sie Schlüsseleinschränkungen, bevor Sie einen Primär- oder Fremdschlüssel hinzufügen. Dies kann im Rahmen Ihres Erfassungsprozesses geschehen, oder Sie können Überprüfungen für Ihre Daten ausführen.

Beispiele

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