Partilhar via


Cláusula CONSTRAINT

Aplica-se a: Marque Sim Databricks SQL Marque Sim Databricks Runtime

Adiciona uma chave primária informacional ou uma chave estrangeira informacional como parte de uma instrução CREATE TABLE ou CREATE MATERIALIZED VIEW .

Para adicionar uma restrição de verificação a uma tabela Delta Lake, use ALTER TABLE após a tabela ter sido criada.

Sintaxe

Use a table_constraint cláusula para definir restrições que abrangem várias colunas ou para separar a sintaxe da definição de coluna.

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

Use a column_constraintcláusula para definir restrições específicas para uma definição de coluna única.

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 }

Para compatibilidade com dialetos SQL não padrão, você pode especificar ENABLE NOVALIDATE em vez de NOT ENFORCED DEFERRABLE INITIALLY DEFERRED.

Parâmetros

  • CONSTRAINTDesignação

    Opcionalmente, especifica um nome para a restrição. O nome deve ser exclusivo dentro do esquema. Se nenhum nome for fornecido, o Azure Databricks gerará um.

  • PRIMARY KEY ( key_column [ SÉRIES CRONOLÓGICAS ] [, ...] ) [ constraint_option [...] ]

    Aplica-se a:Marque Sim Databricks SQL Marque Sim Databricks Runtime 11.3 LTS e superior Marque Sim Somente catálogo Unity

    Adiciona uma restrição de chave primária informativa à tabela ou exibição materializada. Uma tabela ou vista materializada pode ter, no máximo, uma chave primária.

    As colunas de chave primária são implicitamente definidas como NOT NULL.

    Não há suporte para restrições de chave primária para tabelas no hive_metastore catálogo.

    • key_column

      Uma coluna da tabela de assunto ou vista materializada. Os nomes das colunas não devem ser repetidos.

    • TIMESERIES

      Aplica-se a: Marque Sim Databricks SQL Marque Sim Databricks Runtime 13.3 LTS e superior

      Opcionalmente, rotula o componente de coluna de chave primária como representando uma série temporal.

  • PRIMARY KEY [ constraint_option ] [...]

    Adiciona uma restrição de chave primária de coluna única à tabela ou exibição materializada, usando a definição de coluna de chave anterior.

    Isto column_constraint é equivalente ao table_constraint

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

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

    Aplica-se a:Marque Sim Databricks SQL Marque Sim Databricks Runtime 11.3 LTS e superior Marque Sim Somente catálogo Unity

    Adiciona uma restrição de chave estrangeira informacional (integridade referencial) à tabela ou exibição materializada.

    Não há suporte para restrições de chave estrangeira para tabelas no hive_metastore catálogo.

    Restrições de chave estrangeira que diferem apenas na permutação das colunas de chave estrangeira não são permitidas.

    • foreign_key_column

      Uma coluna da tabela de assunto ou vista materializada. Os nomes das colunas não devem ser repetidos. O tipo de dados de cada coluna deve corresponder ao tipo de correspondência parent_column. O número de colunas deve corresponder ao número de parent_columns. Duas chaves estrangeiras não podem compartilhar um conjunto idêntico de colunas de chave estrangeira.

    • parent_table

      Especifica a tabela ou a exibição materializada à qual a chave estrangeira se refere. A tabela deve ter uma restrição definida PRIMARY KEY e você deve ter o SELECT privilégio na tabela.

    • parent_column

      Uma coluna na tabela pai ou no modo de exibição materializado que faz parte de sua chave primária. Todas as colunas de chave primária da tabela pai ou da exibição materializada devem ser listadas.

      Se as PRIMARY KEY colunas pai não estiverem listadas, elas serão especificadas pela ordem dada na definição.

    • FOREIGN KEY REFERENCES parent_table [ ( parent_column ) ] foreign_key_option

      Adiciona uma restrição de chave estrangeira de coluna única à tabela ou exibição materializada, usando a definição de coluna de chave estrangeira anterior.

      Isto column_constraint é equivalente ao table_constraint

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

  • constraint_option

    Lista as propriedades das restrições. Todas as propriedades são opcionais, mas implícitas por padrão. Cada propriedade pode, no máximo, ser especificada uma vez.

    • NOT ENFORCED

      O Azure Databricks não toma nenhuma ação para impô-lo para linhas novas ou existentes.

    • DEFERRABLE

      A aplicação da restrição pode ser adiada.

    • INITIALLY DEFERRED

      A imposição de restrições é adiada.

    • NORELY ou RELY

      Aplica-se a: Marque Sim Databricks SQL Marque Sim Databricks Runtime 14.2 e superior para restrições PRIMARY KEY

      Aplica-se a: Marque Sim Databricks Runtime 15.4 e superior para restrições FOREIGN KEY

      Se RELY, o Azure Databricks pode explorar a restrição para reescrever consultas. É da responsabilidade do utilizador garantir que o constrangimento é cumprido. Confiar em uma restrição que não é satisfeita pode levar a resultados de consulta incorretos.

      A predefinição é NORELY.

  • foreign_key_option

    Lista as propriedades específicas para restrições de chave estrangeira. Todas as propriedades são opcionais, mas implícitas por padrão. Cada propriedade pode, no máximo, ser especificada uma vez.

    • MATCH FULL

      Para que a restrição seja considerada verdadeira, todos os valores de coluna devem ser NOT NULL.

    • ON UPDATE NO ACTION

      Se o pai PRIMARY KEY for atualizado, o Azure Databricks não tomará nenhuma ação para restringir a atualização ou atualizar a chave estrangeira.

    • ON DELETE NO ACTION

      Se a linha pai for excluída, o Azure Databricks não realizará nenhuma ação para restringir a ação, atualizar a chave estrangeira ou excluir a linha dependente.

Importante

O Azure Databricks não impõe restrições de chave primária ou chave estrangeira. Confirme as restrições de chave antes de adicionar uma chave primária ou estrangeira. Seu processo de ingestão pode fornecer essa garantia, ou você pode executar verificações em relação aos seus dados.

Exemplos

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