Delen via


ADD CONSTRAINT-clausule

Van toepassing op:aangevinkt als ja Databricks SQL aangevinkt als ja Databricks Runtime

Voegt een informatieve primaire sleutel, informatieve vreemde sleutel of een geforceerde controlebeperking toe aan een bestaande Delta Lake-tabel.

Syntaxis

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 }

Voor compatibiliteit met niet-standaard SQL-dialecten kunt u opgeven ENABLE NOVALIDATE in plaats van NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parameterwaarden

  • check_constraint

    Hiermee definieert u een controlebeperking voor een relatie.

    • CONSTRAINT naam

      Hiermee geeft u een naam voor de beperking. De naam moet uniek zijn binnen de relatie.

    • CHECK ( voorwaarde)

      De DEFAULT COLLATION relatie moet zijn UTF8_BINARY op het moment dat de beperking wordt toegevoegd.

      condition moet een deterministische expressie zijn die een BOOLEAN.

      condition kan bestaan uit letterlijke waarden, kolom-id's binnen de relatie en deterministische, ingebouwde SQL-functies of -operators, met uitzondering van:

      Mag ook condition geen subquery bevatten.

      Om aan een CHECK beperking te voldoen in Azure Databricks, moet deze gelijk zijn aan true.

      Delta Lake controleert de geldigheid van de controlebeperking op zowel nieuwe als bestaande gegevens. Als een bestaande rij de beperking schendt, wordt er een fout gemeld.

  • key_constraint

    Belangrijk

    Deze functie is beschikbaar als openbare preview.

    Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 11.3 LTS en hoger

    Definieert een informatieve primaire sleutel of informatieve vreemde sleutelbeperking voor een relatie. Beperkingen voor informatieve sleutels worden niet afgedwongen, maar kunnen de prestaties verbeteren door ondersteuning te bieden voor queryoptimalisaties.

    • CONSTRAINT naam

      Hiermee geeft u desgewenst een naam op voor de beperking. De naam moet uniek zijn binnen het schema. Als er geen naam is opgegeven, genereert Azure Databricks er een.

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

      Van toepassing op:met vinkje ja alleen Unity Catalog

      Hiermee voegt u een primaire-sleutelbeperking toe aan de relatie. Een relatie kan maximaal één primaire sleutel hebben.

      Primaire-sleutelbeperkingen worden niet ondersteund voor relaties in de hive_metastore catalogus.

    • key_column

      Een kolom met de onderwerprelatie die is gedefinieerd als NOT NULL. Kolomnamen mogen niet worden herhaald.

    • TIMESERIES

      Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 13.3 LTS en hoger

      Desgewenst kunt u de kolom van de primaire sleutel labelen als een tijdreeks.

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

      Van toepassing op:met vinkje ja alleen Unity Catalog

      Hiermee voegt u een referentiële sleutelbeperking (referentiële integriteit) toe aan de relatie.

      Beperkingen voor foreign keys worden niet ondersteund voor relaties in de hive_metastore catalog.

      • vreemde_sleutel_kolom

        Een kolom van de onderwerprelatie. Kolomnamen mogen niet worden herhaald. Het gegevenstype van elke kolom moet overeenkomen met het type overeenkomende parent_column. Het aantal kolommen moet overeenkomen met het aantal parent_columns. Twee vreemde sleutels kunnen geen identieke set vreemde-sleutelkolommen delen.

      • parent_relation

        Hiermee geeft u de relatie op waarnaar de vreemde sleutel verwijst. De relatie moet een gedefinieerde PRIMARY KEY beperking hebben en u moet de SELECT bevoegdheid voor de relatie hebben.

      • parent_column

        Een kolom in de ouderrelatie die deel uitmaakt van de primaire sleutel. Alle primaire sleutelkolommen van de bovenliggende relatie moeten worden genoemd.

        Als bovenliggende kolommen niet worden vermeld, worden ze verondersteld in de volgorde te staan zoals gespecificeerd in de PRIMARY KEY-definitie.

      Beperkingen voor vreemde sleutels die alleen verschillen in de volgorde van de vreemde sleutelkolommen zijn niet toegestaan.

    • constraint_option

      Hiermee worden de eigenschappen van de beperkingen weergegeven. Alle eigenschappen zijn optioneel, maar worden standaard geïmpliceerd. Elke eigenschap kan maximaal eenmaal worden opgegeven.

      • NOT ENFORCED

        Azure Databricks voert geen actie uit om deze af te dwingen voor bestaande of nieuwe rijen.

      • DEFERRABLE

        De afdwinging van beperkingen kan worden uitgesteld.

      • INITIALLY DEFERRED

        Afdwingen van beperkingen wordt uitgesteld.

      • NORELY of RELY

        Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 14.2 en hoger voor beperkingen PRIMARY KEY

        Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 15.4 en hoger voor FOREIGN KEY beperkingen

        Als RELY, kan Azure Databricks gebruikmaken van de beperking om query's te herschrijven. Het is de verantwoordelijkheid van de gebruiker om ervoor te zorgen dat aan de beperking wordt voldaan. Als u afhankelijk bent van een beperking die niet is voldaan, kan dit leiden tot onjuiste queryresultaten.

        De standaardwaarde is NORELY.

    • foreign_key_option

      Geeft een lijst van de eigenschappen die specifiek zijn voor foreign key-beperkingen. Alle eigenschappen zijn optioneel, maar worden standaard geïmpliceerd. Elke eigenschap kan maximaal eenmaal worden opgegeven.

      • MATCH FULL

        Als de beperking als waar moet worden beschouwd, moeten alle kolomwaarden worden NOT NULL.

      • ON UPDATE NO ACTION

        Als de bovenliggende PRIMARY KEY wordt bijgewerkt, onderneemt Azure Databricks geen actie om de bijwerking te beperken of de vreemde sleutel bij te werken.

      • ON DELETE NO ACTION

        Als de bovenliggende rij wordt verwijderd, onderneemt Azure Databricks geen actie om de actie te beperken, de refererende sleutel bij te werken of de afhankelijke rij te verwijderen.

Belangrijk

Azure Databricks dwingt geen beperkingen af voor primaire sleutels of vreemde sleutels. Bevestig sleutelbeperkingen voordat u een primaire of vreemde sleutel toevoegt. Uw opnameproces kan dergelijke zekerheid bieden of u kunt controles uitvoeren op basis van uw gegevens.

Voorbeelden

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