Creating constraints

Uma restrição pode ser criada na criação da tabela usando CREATE TABLE, ou adicionada posteriormente a uma tabela usando ALTER TABLE:

  • As restrições de uma coluna podem ser criadas em linha como parte da definição da coluna.

  • Multi-column constraints must be created with a separate out-of-line clause that specifies the columns in the constraint.

Para criar uma restrição, certos privilégios de controle de acesso devem ser concedidos para a função utilizada a fim de criar a restrição. Para obter mais informações, consulte Requisitos de controle de acesso.

Creating constraints inline

A sintaxe em linha a seguir só pode ser usada para restrições de uma única coluna:

CREATE [ OR REPLACE ] TABLE <name> (<column_name> <column_type> [ <inline_constraint> ] , ... )

ALTER TABLE <name> ADD COLUMN <column_name> <column_type> [ <inline_constraint> ]

Para obter detalhes de sintaxe inline_constraint, consulte CREATE | ALTER TABLE … CONSTRAINT.

Creating constraints out-of-line

A seguinte sintaxe fora de linha deve ser usada para restrições de múltiplas colunas, mas também pode ser usada para restrições de uma única coluna:

CREATE [ OR REPLACE ] TABLE <name> ( ... , [ <outofline_constraint> ], ... )

ALTER TABLE <name> ADD <outofline_constraint>

Para obter detalhes de sintaxe outofline_constraint, consulte CREATE | ALTER TABLE … CONSTRAINT.

Restrições em CREATE TABLE … LIKE e CLONE

O Snowflake oferece suporte à criação de cópias de tabelas usando CREATE TABLE:

  • Para criar uma cópia vazia, use CREATE TABLE … LIKE.

  • Para criar um clone, use CREATE TABLE … CLONE.

Além disso, cópias de tabelas são criadas automaticamente quando um esquema ou banco de dados é clonado.

Independentemente de como uma cópia é criada para uma tabela, as restrições da tabela original também são copiadas. Ao copiar uma chave estrangeira com uma tabela que faz referências (tabela de chave estrangeira) e uma tabela referenciada (tabela de chave primária), os seguintes cenários podem ocorrer:

  • Se ambas as tabelas forem copiadas no mesmo comando (como durante a clonagem de um esquema ou banco de dados), uma nova chave estrangeira será criada entre a nova tabela de referência e a tabela referenciada.

  • Se apenas a tabela de referência for copiada, uma nova chave estrangeira será criada na tabela de referência, que aponta para a tabela de chave primária original como a tabela referenciada.

  • If only the referenced table is copied, no new foreign keys are created, although the primary or unique keys are copied.

Como resultado, se você copiar uma tabela de referência e uma tabela referenciada separadamente, será necessário criar manualmente uma nova chave estrangeira ou alterar manualmente a tabela de chave primária para a nova chave estrangeira.