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 propriedadeRELY
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;
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.