Dela via


CONSTRAINT-sats

Gäller för: markerad ja Databricks SQL markerad ja Databricks Runtime

Lägger till en primär informationsnyckel eller en sekundärnyckel för information som en del av en CREATE TABLE - eller CREATE MATERIALIZED VIEW-instruktion .

Om du vill lägga till en kontrollbegränsning i en Delta Lake-tabell använder du ALTER TABLE när tabellen har skapats.

Syntax

table_constraint Använd -satsen för att definiera begränsningar som sträcker sig över flera kolumner eller för att skilja syntaxen från kolumndefinitionen.

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

column_constraintAnvänd -satsen för att definiera begränsningar som är specifika för en enskild kolumndefinition.

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 }

För kompatibilitet med sql-dialekter som inte är standard kan du ange ENABLE NOVALIDATE i stället för NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parameters

  • CONSTRAINTNamn

    Du kan också ange ett namn för villkoret. Namnet måste vara unikt i schemat. Om inget namn anges genererar Azure Databricks ett.

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

    Gäller endast för: markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare markerad ja i Unity Catalog

    Lägger till en informationsnyckelbegränsning i tabellen eller den materialiserade vyn. En tabell eller materialiserad vy kan ha högst en primärnyckel.

    Primärnyckelkolumner definieras implicit som NOT NULL.

    Primära nyckelbegränsningar stöds inte för tabeller i hive_metastore katalogen.

    • key_column

      En kolumn i ämnestabellen eller materialiserad vy. Kolumnnamn får inte upprepas.

    • TIMESERIES

      Gäller för: markerad ja Databricks SQL markerad ja Databricks Runtime 13.3 LTS och senare

      Du kan också etikettera primärnyckelkolumnkomponenten som representerar en tidsserie.

  • PRIMARY KEY [ constraint_option ] [...]

    Lägger till en primärnyckelbegränsning för en enskild kolumn i tabellen eller den materialiserade vyn med hjälp av definitionen för föregående nyckelkolumn.

    Detta column_constraint motsvarar table_constraint

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

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

    Gäller endast för: markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare markerad ja i Unity Catalog

    Lägger till en begränsning för sekundärnyckel (referensintegritet) i tabellen eller den materialiserade vyn.

    Begränsningar för sekundärnyckel stöds inte för tabeller i hive_metastore katalogen.

    Begränsningar för sekundärnyckel som endast skiljer sig åt i permutationen för sekundärnyckelkolumnerna tillåts inte.

    • foreign_key_column

      En kolumn i ämnestabellen eller materialiserad vy. Kolumnnamn får inte upprepas. Datatypen för varje kolumn måste matcha typen av matchande parent_column. Antalet kolumner måste matcha antalet parent_columns. Två sekundärnycklar kan inte dela en identisk uppsättning sekundärnyckelkolumner.

    • parent_table

      Anger tabellen eller den materialiserade vy som sekundärnyckeln refererar till. Tabellen måste ha en definierad PRIMARY KEY begränsning och du måste ha behörigheten SELECT för tabellen.

    • parent_column

      En kolumn i den överordnade tabellen eller den materialiserade vyn som är en del av dess primära nyckel. Alla primärnyckelkolumner i den överordnade tabellen eller den materialiserade vyn måste visas.

      Om överordnade kolumner inte visas anges de i den ordning som anges i PRIMARY KEY definitionen.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Lägger till en begränsning för sekundärnyckel för en enskild kolumn i tabellen eller den materialiserade vyn med hjälp av den föregående definitionen för sekundärnyckelkolumnen.

      Detta column_constraint motsvarar table_constraint

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

  • constraint_option

    Visar en lista över egenskaperna för begränsningarna. Alla egenskaper är valfria men underförstådda som standard. Varje egenskap kan högst anges en gång.

    • NOT ENFORCED

      Azure Databricks vidtar inga åtgärder för att framtvinga det för befintliga eller nya rader.

    • DEFERRABLE

      Begränsningsframtvingandet kan skjutas upp.

    • INITIALLY DEFERRED

      Begränsningsframtvingandet skjuts upp.

    • NORELY eller RELY

      Gäller för: markerad ja Databricks SQL markerad ja Databricks Runtime 14.2 och senare för begränsningar PRIMARY KEY

      Gäller för: markerad ja Databricks Runtime 15.4 och senare för begränsningar FOREIGN KEY

      Om RELYkan Azure Databricks utnyttja begränsningen för att skriva om frågor. Det är användarens ansvar att se till att begränsningen uppfylls. Om du förlitar dig på en begränsning som inte är uppfylld kan det leda till felaktiga frågeresultat.

      Standardvärdet är NORELY.

  • foreign_key_option

    Visar en lista över egenskaper som är specifika för begränsningar för sekundärnyckel. Alla egenskaper är valfria men underförstådda som standard. Varje egenskap kan högst anges en gång.

    • MATCH FULL

      För att villkoret ska betraktas som sant måste alla kolumnvärden vara NOT NULL.

    • ON UPDATE NO ACTION

      Om den överordnade PRIMARY KEY enheten uppdateras vidtar Azure Databricks ingen åtgärd för att begränsa uppdateringen eller uppdatera sekundärnyckeln.

    • ON DELETE NO ACTION

      Om den överordnade raden tas bort vidtar Azure Databricks ingen åtgärd för att begränsa åtgärden, uppdatera sekundärnyckeln eller ta bort den beroende raden.

Viktigt!

Azure Databricks tillämpar inte begränsningar för primärnyckel eller sekundärnyckel. Bekräfta nyckelbegränsningar innan du lägger till en primär eller sekundärnyckel. Inmatningsprocessen kan ge sådan säkerhet, eller så kan du köra kontroller mot dina data.

Exempel

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