Partilhar via


Cláusula ADD CONSTRAINT

Aplica-se a:Marcado como Sim Databricks SQL Marcado como Sim Databricks Runtime

Adiciona uma chave primária informativa, uma chave estrangeira informativa ou uma restrição de verificação imposta a uma tabela Delta Lake existente, vista materializada ou tabela de streaming.

Sintaxe

ADD [check_constraint | key_constraint ]

check_constraint
    CONSTRAINT name CHECK ( condition ) [ ENFORCED ]

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 }

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

Parâmetros

  • check_constraint

    Define uma restrição de verificação para uma relação.

    • CONSTRAINT Nome

      Especifica um nome para a restrição. O nome deve ser exclusivo dentro da relação.

    • CHECK ( condição)

      O DEFAULT COLLATION da relação deve estar UTF8_BINARY no momento em que a restrição é adicionada.

      condition deve ser uma expressão determinística que retorne a BOOLEAN.

      condition pode ser composto por literais, identificadores de coluna dentro da relação, e funções internas e operadores determinísticos de SQL, exceto:

      Também condition não deve conter nenhuma subconsulta.

      Para que uma restrição de CHECK seja satisfeita no Azure Databricks, ela deve ser avaliada para true.

      O Delta Lake verifica a validade da restrição de verificação em relação a dados novos e existentes. Se qualquer linha existente violar a restrição, um erro será gerado.

  • key_constraint

    Importante

    Esta funcionalidade está em Pré-visualização Pública.

    Aplica-se a:sim Databricks SQL sim Databricks Runtime 11.3 LTS e superior

    Define uma chave primária informacional ou restrição de chave estrangeira informacional para uma relação. As restrições de chave informativa não são impostas, mas podem melhorar o desempenho ao apoiar otimizações de consultas .

    • CONSTRAINT Nome

      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 [ TIMESERIES ] [, ...] ) [ constraint_option [...] ]

      Aplica-se a:marcado com sim somente para o Catálogo Unity

      Adiciona uma restrição de chave primária à relação. Uma relação pode ter, no máximo, uma chave primária.

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

    • key_column

      Uma coluna da relação de assunto definida como NOT NULL. Os nomes das colunas não devem ser repetidos.

    • TIMESERIES

      Aplica-se a:sinalizado como sim Databricks SQL sinalizado como sim Databricks Runtime 13.3 LTS e superior

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

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

      Aplica-se a:marcado com sim somente para o Catálogo Unity

      Adiciona uma restrição de chave estrangeira (integridade referencial) à relação.

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

      • coluna_chave_estrangeira

        Uma coluna da relação com o assunto. Os nomes das colunas não devem ser repetidos. O tipo de dados de cada coluna deve corresponder ao tipo do parent_columncorrespondente. 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_relation

        Especifica a relação à qual a chave estrangeira se refere. A relação deve ter uma restrição definida PRIMARY KEY e você deve ter o SELECT privilégio sobre a relação.

      • parent_column

        Uma coluna na relação pai que faz parte de sua chave primária. Todas as colunas de chave primária da relação pai devem ser listadas.

        Se as colunas pai não estiverem listadas, presume-se que estejam especificadas na ordem dada na definição de PRIMARY KEY.

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

    • 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 medidas para aplicá-lo a 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:verificado como sim Databricks SQL verificado como sim Databricks Runtime 14.2 e superior para PRIMARY KEY restrições

        Aplica-se a:marcado com sim Databricks SQL marcado com sim Databricks Runtime 15.4 e versões superiores para restrições de FOREIGN KEY

        Caso RELYesteja presente, Azure Databricks pode utilizar 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 PRIMARY KEY pai for atualizado, o Azure Databricks não tomará medidas para restringir a atualização nem atualizar a chave estrangeira.

      • ON DELETE NO ACTION

        Se a linha pai for excluída, o Azure Databricks não tomará 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

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