Freigeben über


ADD CONSTRAINT-Klausel

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

Fügt einer vorhandenen Delta Lake-Tabelle einen informationsalen Primärschlüssel, einen informationsalen Fremdschlüssel oder eine erzwungene Prüfeinschränkung hinzu.

Syntax

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition )

key_constraint
    { [ CONSTRAINT name ]
      {
        PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
        { FOREIGN KEY (foreign_key_column [, ...] )
          REFERENCES parent_relation [ ( 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 }

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

  • check_constraint

    Definiert eine Check-Constraint für eine Relation.

    • CONSTRAINT Name

      Gibt einen Namen für die Einschränkung an. Der Name muss innerhalb der Beziehung eindeutig sein.

    • CHECK ( Bedingung)

      Die DEFAULT COLLATION Beziehung muss UTF8_BINARY zu dem Zeitpunkt sein, zu dem die Einschränkung hinzugefügt wird.

      condition muss ein deterministischer Ausdruck sein, der BOOLEAN zurückgibt.

      condition kann aus Literalen, Spaltenbezeichnern innerhalb der Beziehung und deterministischen, integrierten SQL-Funktionen oder Operatoren bestehen, außer:

      Darüber hinaus darf condition keine Unterabfrage enthalten.

      Damit eine CHECK-Einschränkung in Azure Databricks erfüllt ist, muss sie als true ausgewertet werden.

      Delta Lake überprüft die Gültigkeit der CHECK-Einschränkung sowohl für neue als auch für vorhandene Daten. Wenn eine vorhandene Zeile gegen die Einschränkung verstößt, wird ein Fehler ausgelöst.

  • key_constraint

    Wichtig

    Dieses Feature befindet sich in der Public Preview.

    Gilt für:mit Häkchen markiert: Ja Databricks SQL mit Häkchen markiert: Ja Databricks Runtime 11.3 LTS und höhere

    Definiert eine informative Primärschlüssel- oder informative Fremdschlüsseleinschränkung für eine Beziehung. Informationsschlüsseleinschränkungen werden nicht erzwungen, können jedoch die Leistung verbessern, indem Abfrageoptimierungen unterstützt werden.

    • CONSTRAINT Name

      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 gesetzt ja Nur Unity Catalog

      Fügt der Relation eine Primärschlüsselbeschränkung hinzu. Eine Beziehung kann höchstens einen Primärschlüssel aufweisen.

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

    • key_column

      Eine Spalte der Betreffbeziehung, die als NOT NULL definiert ist. 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.

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

      Gilt für:Häkchen gesetzt ja Nur Unity Catalog

      Fügt der Relation eine Fremdschlüsseleinschränkung (referenzielle Integrität) hinzu.

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

      • foreign_key_column

        Eine Spalte der Subjektbeziehung. 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_columnss entsprechen. Zwei Fremdschlüssel können nicht über einen identischen Satz von Fremdschlüsselspalten verfügen.

      • parent_relation

        Gibt die Beziehung an, auf die sich der Fremdschlüssel bezieht. Die Beziehung muss über eine definierte PRIMARY KEY Einschränkung verfügen, und Sie müssen über die SELECT Berechtigung für die Beziehung verfügen.

      • parent_column

        Eine Spalte in der übergeordneten Relation, die zum Primärschlüssel gehört. Alle Primärschlüsselspalten der übergeordneten Beziehung müssen aufgelistet werden.

        Wenn übergeordnete Spalten nicht aufgeführt sind, wird davon ausgegangen, dass sie in der Reihenfolge vorliegen, die in der PRIMARY KEY-Definition angegeben ist.

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

    • 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:Grünes Häkchen für „Ja“ Databricks SQL Grünes Häkchen für „Ja“ Databricks Runtime, Version 14.2 und höher für PRIMARY KEY-Einschränkungen

        Gilt für:mit „Ja“ markiert Databricks SQL Grünes Häkchen für „Ja“ Databricks Runtime, Version 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 Verantwortung des Benutzers, 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. Ihr Erfassungsprozess könnte diese Sicherheit bieten, oder Sie können Überprüfungen an Ihren Daten durchführen.

Beispiele

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