cláusula CONSTRAINT

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Agrega una clave principal informativa, una clave externa informativa o una restricción única informativa como parte de una CREATE TABLE instrucción o CREATE MATERIALIZED VIEW .

Para agregar una restricción check a una tabla de Delta Lake, use ALTER TABLE una vez creada la tabla.

Sintaxis

Use la cláusula table_constraint para definir restricciones que abarquen varias columnas o para separar la sintaxis de la definición de columnas.

table_constraint
   { [ CONSTRAINT name ]
     { PRIMARY KEY ( key_column [ TIMESERIES ] [, ...] ) [ constraint_option [...] ] |
       UNIQUE ( key_column [, ...] ) [ constraint_option [...] ] |
       { FOREIGN KEY ( foreign_key_column [, ...] )
         REFERENCES parent_table [ ( parent_column [, ...] ) ]
         [ foreign_key_option | constraint_option ] [...]
       }
     }
   }

Use la cláusula column_constraint para definir restricciones específicas de una única definición de columna.

column_constraint
  { [ CONSTRAINT name ]
    { PRIMARY KEY [ constraint_option ] [...] |
      UNIQUE [ 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 }

Para la compatibilidad con dialectos no estándar de SQL, puede especificar ENABLE NOVALIDATE en lugar de NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parámetros

  • CONSTRAINT nombre

    Especifica un nombre opcional para la restricción. El nombre debe ser único dentro del esquema. Si no se proporciona ningún nombre, Azure Databricks generará uno.

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

    Se aplica a:casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 11.3 LTS y versiones posteriores casilla marcada como Sí solo Unity Catalog

    Agrega una restricción de clave principal informativa a la tabla o vista materializada. Una tabla o vista materializada puede tener como máximo una clave principal.

    Las columnas de clave principal se definen implícitamente como NOT NULL.

    Las restricciones de clave principal no se admiten para las tablas del catálogo hive_metastore.

    • key_column

      Columna de la tabla de asunto o vista materializada. Los nombres de columna no se deben repetir.

    • TIMESERIES

      Se aplica a:casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 13.3 LTS y versiones posteriores

      Opcionalmente, etiqueta el componente de columna de clave principal para indicar que representa una serie temporal.

  • PRIMARY KEY [ constraint_option ] [...]

    Agrega una restricción de clave principal de columna única a la tabla o vista materializada mediante la definición de la columna de clave precedente.

    column_constraint es equivalente a table_constraint.

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

  • UNIQUE ( key_column [, ...] ) [ constraint_option [...] ]

    Se aplica a:check marcado yes La comprobación de SQL de Databricks marcada como sí Databricks Runtime 18.2 y versiones posteriores marcada como sí catálogo de Unity solo

    Agrega una restricción única informativa a la tabla. Una tabla puede tener varias restricciones únicas.

    No se admiten restricciones únicas para las tablas del hive_metastore catálogo.

    Las columnas de una UNIQUE restricción pueden ser nullables, incluido cuando una clave externa hace referencia a la restricción. NULL los valores de las UNIQUE columnas se tratan como distintos entre sí, por lo que los valores duplicados NULL no infringen la semántica de una UNIQUE restricción.

    • key_column

      Columna de la tabla de asunto. Los nombres de columna no se deben repetir.

  • UNIQUE [ constraint_option ] [...]

    Agrega una restricción única de columna única a la tabla mediante la definición de columna de clave anterior.

    column_constraint es equivalente a table_constraint.

    UNIQUE (key_column) [ constraint_option ] [...]

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

    Se aplica a:casilla marcada como sí Databricks SQL casilla marcada como Sí Databricks Runtime 11.3 LTS y versiones posteriores casilla marcada como Sí solo Unity Catalog

    Agrega una restricción de clave externa informativa (integridad referencial) a la tabla o vista materializada.

    Las restricciones de clave externa no se admiten para las tablas del catálogo hive_metastore.

    No se permiten restricciones de clave externa que solo difieren en la permutación de las columnas de la clave externa.

    • columna_de_clave_externa

      Columna de la tabla de asunto o vista materializada. Los nombres de columna no se deben repetir. El tipo de datos de cada columna debe coincidir con el tipo de la columna coincidente especificada como parent_column. El número de columnas debe coincidir con el número de apariciones de parent_column. Dos claves externas no pueden compartir un conjunto idéntico de columnas de clave externa.

    • parent_table

      Especifica la tabla o vista materializada a la que hace referencia la clave externa. La tabla debe tener una restricción definida o, en Databricks Runtime 18.2 y versiones posteriores, una restricción definida PRIMARY KEYUNIQUE y debe tener el SELECT privilegio en la tabla.

    • parent_column

      Columna de la tabla primaria o vista materializada que forma parte de su clave principal o, en Databricks Runtime 18.2 y versiones posteriores, parte de una restricción única. Todas las columnas de clave principal o columnas de restricción única de la tabla primaria o la vista materializada deben aparecer.

      Si no se enumeran las columnas primarias, se especifican según el orden determinado en la definición PRIMARY KEY.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Agrega una restricción de clave externa de columna única a la tabla o vista materializada mediante la definición de la columna de clave externa precedente.

      column_constraint es equivalente a table_constraint.

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

  • opción_de_restricción

    Enumera las propiedades de las restricciones. Todas las propiedades son opcionales pero implícitas de manera predeterminada. Cada propiedad se puede especificar como máximo una vez.

    • NOT ENFORCED

      Azure Databricks no realiza ninguna acción para aplicarla a las filas existentes o nuevas.

    • DEFERRABLE

      La aplicación de las restricciones se puede aplazar.

    • INITIALLY DEFERRED

      Se aplaza la aplicación de las restricciones.

    • NORELY o RELY

      Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime 14.2 y versiones posteriores para restricciones de PRIMARY KEY

      Se aplica a:Comprobar que se ha marcado sí Databricks SQL Comprobar que se ha marcado sí Databricks Runtime 15.4 y versiones posteriores para restricciones de FOREIGN KEY

      Se aplica a:check marcado yes Databricks SQL check marcado yes Databricks Runtime 18.2 y versiones posteriores para UNIQUE restricciones

      Si RELY, Azure Databricks podría aprovechar la restricción para reescribir y optimizar las consultas. Es responsabilidad del usuario asegurarse de que se cumple la restricción. Confiar en una restricción que no se cumple puede provocar resultados de consulta incorrectos. Las optimizaciones de consultas asociadas al comando RELY requieren que las consultas se ejecuten en la computación activada por Photon. Consulte ¿Qué es Photon?

      El valor predeterminado es NORELY.

  • foreign_key_option (opción de clave foránea)

    Enumera las propiedades específicas de las restricciones de clave externa. Todas las propiedades son opcionales pero implícitas de manera predeterminada. Cada propiedad se puede especificar como máximo una vez.

    • MATCH FULL

      Para que la restricción se considere como True, todos los valores de columna deben ser NOT NULL.

    • ON UPDATE NO ACTION

      Si se actualiza el elemento primario PRIMARY KEY, Azure Databricks no realizará ninguna acción para restringir la actualización ni actualizará la clave externa.

    • ON DELETE NO ACTION

      Si se elimina la fila primaria, Azure Databricks no realizará ninguna acción para restringir la acción, actualizar la clave externa ni eliminar la fila dependiente.

Importante

Azure Databricks no aplica restricciones de clave principal, clave externa ni únicas. Confirme las restricciones de clave antes de agregar una clave principal, una clave externa o una restricción única. El proceso de ingesta puede proporcionar dicha garantía o también puede ejecutar comprobaciones en los datos.

Ejemplos

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

-- Create a table with a column unique constraint
> CREATE TABLE person_contacts(first_name STRING NOT NULL, last_name STRING NOT NULL,
                               nickname STRING UNIQUE);

-- Create a table with a multi-column unique constraint
> CREATE TABLE person_accounts(first_name STRING NOT NULL, last_name STRING NOT NULL, account_id STRING,
                               CONSTRAINT person_accounts_uq UNIQUE(first_name, last_name));

-- Create a table with a foreign key that references a unique column
> CREATE TABLE pet_tags(tag STRING NOT NULL, owner_nickname STRING,
                        CONSTRAINT pet_tags_owner_fk FOREIGN KEY (owner_nickname) REFERENCES person_contacts(nickname));