Propriedades de restrição

As propriedades de restrição são especificadas na cláusula CONSTRAINT para um comando CREATE TABLE ou ALTER TABLE.

Neste tópico:

Propriedades de restrição ANSI SQL

Propriedades para todas as restrições

As seguintes propriedades de restrição da norma ANSI SQL aplicam-se a todas as restrições (única, chave primária e chave estrangeira):

{ ENFORCED | NOT ENFORCED }

Especifica se a restrição é aplicada em uma transação. Observe que NOT NULL é a única restrição imposta pelo Snowflake. Consulte Restrições de integridade referencial.

{ DEFERRABLE | NOT DEFERRABLE }

Especifica se, em transações subsequentes, a verificação de restrição pode ser adiada até o final da transação.

INITIALLY { DEFERRED | IMMEDIATE }

Para restrições DEFERRABLE, especifica se a verificação das restrições é adiada a partir da próxima transação.

Os padrões para as propriedades de restrição padrão são:

NOT ENFORCED DEFERRABLE INITIALLY DEFERRED

Propriedades apenas para restrições de chave estrangeira

As seguintes propriedades de restrição também são da norma ANSI SQL, mas só se aplicam a chaves estrangeiras:

MATCH { FULL | PARTIAL | SIMPLE }

Especifica se a chave estrangeira está satisfeita com relação aos valores NULL em uma ou mais das colunas.

UPDATE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

Especifica a ação executada quando a chave primária/única da chave estrangeira é atualizada.

DELETE { CASCADE | SET NULL | SET DEFAULT | RESTRICT | NO ACTION }

Especifica a ação executada quando a chave primária/única da chave estrangeira é excluída.

Os padrões para as propriedades de restrição de chave estrangeira são:

MATCH FULL UPDATE NO ACTION DELETE NO ACTION

Propriedades estendidas de restrição

As seguintes propriedades não fazem parte da norma ANSI SQL, mas são aceitas para compatibilidade com outros bancos de dados. Elas se aplicam a todas as restrições (chave única, chave primária e chave estrangeira):

{ ENABLE | DISABLE }

Especifica se a restrição está ativada ou desativada. Essas propriedades são fornecidas para compatibilidade com a Oracle.

Por padrão, essa propriedade de restrição é definida como DISABLE.

{ VALIDATE | NOVALIDATE }

Especifica se os dados existentes na tabela devem ser validados quando uma restrição é criada. Somente usado em conjunto com a propriedade { ENABLE | DISABLE}.

Por padrão, essa propriedade de restrição é definida como NOVALIDATE.

{ RELY | NORELY }

Especifica se uma restrição no modo NOVALIDATE é levada em conta durante a reescrita da consulta.

Por padrão, essa propriedade de restrição é definida como NORELY.

Se você garantiu que os dados na tabela estão de acordo com as restrições, é possível mudá-la para RELY para indicar que o otimizador de consultas deve esperar que os dados na tabela se adaptem às restrições. A configuração da propriedade RELY pode melhorar o desempenho da consulta (por exemplo, ao eliminar junções desnecessárias).

Para as restrições primárias e de chave estrangeira, defina essa propriedade para a restrição de chave primária e para a restrição de chave estrangeira. Por exemplo:

ALTER TABLE table_with_primary_key ALTER CONSTRAINT a_primary_key_constraint RELY;
ALTER TABLE table_with_foreign_key ALTER CONSTRAINT a_foreign_key_constraint RELY;
Copy

Valores não padrão para propriedades de restrição ENABLE e VALIDATE

Para compatibilidade de sintaxe com outros bancos de dados, o Snowflake oferece suporte à especificação de valores não padrão para as propriedades de restrição.

No entanto, se você especificar ENABLE ou VALIDATE (os valores não padrão para essas propriedades) ao criar uma nova restrição, a restrição não será criada. Isso não se aplica a RELY. Especificar RELY resulta na criação da nova restrição.

Observe que o Snowflake fornece um parâmetro de sessão, UNSUPPORTED_DDL_ACTION, que determina se a especificação de valores não padrão durante a criação da restrição gera um erro.