Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Especifica as propriedades de uma restrição PRIMARY KEY, FOREIGN KEY, UNIQUE ou CHECK que faz parte de uma nova definição de coluna adicionada a uma tabela usando ALTER TABLE.
Transact-SQL convenções de sintaxe
Syntax
Syntax for SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL database in Microsoft Fabric
[ CONSTRAINT constraint_name ]
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ WITH ( index_option [, ...n ] ) ]
[ ON { partition_scheme_name (partition_column_name)
| filegroup | "default" } ]
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name
[ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}
Sintaxe do Microsoft Fabric Warehouse
[ CONSTRAINT constraint_name ]
{
{ PRIMARY KEY | UNIQUE }
NONCLUSTERED
(column [ ASC | DESC ] [ ,...n ] )
NOT ENFORCED
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
NOT ENFORCED
}
Arguments
CONSTRAINT
Especifica o início da definição para uma restrição de CHAVE PRIMÁRIA, EXCLUSIVA, CHAVE ESTRANGEIRA ou CHECK.
constraint_name
É o nome da restrição. Os nomes de restrição devem seguir as regras para identificadores, exceto que o nome não pode começar com um sinal numérico (#). Se constraint_name não for fornecido, um nome gerado pelo sistema será atribuído à restrição.
NULO | NÃO NULO
Especifica se a coluna pode aceitar NULL valores. As colunas que não permitem NULL valores só podem ser adicionadas se tiverem um padrão especificado. Se a nova coluna permitir NULL valores e nenhum padrão for especificado, a nova coluna conterá NULL para cada linha da tabela. Se a nova coluna permitir NULL valores e uma definição padrão for adicionada com a nova coluna, a opção WITH VALUES poderá ser usada para armazenar o valor padrão na nova coluna para cada linha existente na tabela.
Se a nova coluna não permitir NULL valores, uma definição PADRÃO deverá ser adicionada com a nova coluna. A nova coluna é carregada automaticamente com o valor padrão nas novas colunas em cada linha existente.
Quando a adição de uma coluna requer alterações físicas nas linhas de dados de uma tabela, como a adição de valores DEFAULT a cada linha, os bloqueios são mantidos na tabela enquanto ALTER TABLE é executado. Isso afeta a capacidade de alterar o conteúdo da tabela enquanto o bloqueio está no lugar. Por outro lado, adicionar uma coluna que permite NULL valores e não especifica um valor padrão é apenas uma operação de metadados e não envolve bloqueios.
Quando você usa CREATE TABLE ou ALTER TABLE, as configurações de banco de dados e sessão influenciam e, possivelmente, substituem a anulabilidade do tipo de dados usado em uma definição de coluna. Recomendamos que você sempre defina explicitamente colunas não computadas como NULL ou NOT NULL ou, se você usar um tipo de dados definido pelo usuário, permita que a coluna use a anulabilidade padrão do tipo de dados. Para obter mais informações, consulte CREATE TABLE.
CHAVE PRIMÁRIA
É uma restrição que impõe a integridade da entidade para uma coluna ou colunas especificadas usando um índice exclusivo. Apenas uma restrição de CHAVE PRIMÁRIA pode ser criada para cada tabela.
UNIQUE
É uma restrição que fornece integridade de entidade para uma coluna ou colunas especificadas usando um índice exclusivo.
AGRUPADOS | NÃO AGRUPADO
Especifica que um índice clusterizado ou não clusterizado é criado para a restrição PRIMARY KEY ou UNIQUE. Restrições de CHAVE PRIMÁRIA padrão para CLUSTERED. Restrições UNIQUE padrão para NONCLUSTERED.
Se já existir uma restrição ou índice clusterizado em uma tabela, CLUSTERED não poderá ser especificado. Se já existir uma restrição ou índice clusterizado em uma tabela, as restrições de CHAVE PRIMÁRIA serão padronizadas como NONCLUSTERED.
As colunas dos tipos de dados ntext, text, varchar(max), nvarchar(max), varbinary(max), xml ou image não podem ser especificadas como colunas para um índice.
No Microsoft Fabric Warehouse, NONCLUSTERED não tem efeito.
COM FILLFACTOR = FILLFACTOR
Especifica o quão completo o Mecanismo de Banco de Dados deve tornar cada página de índice usada para armazenar os dados de índice. Os valores de fator de preenchimento especificados pelo usuário podem ser de 1 a 100. Se um valor não for especificado, o padrão será 0.
Important
Documentar como a única opção de WITH FILLFACTOR índice que se aplica a restrições de CHAVE PRIMÁRIA ou EXCLUSIVO é mantido para compatibilidade com versões anteriores, mas não será documentado dessa maneira em versões futuras. Outras opções de índice podem ser especificadas na cláusula index_option de ALTER TABLE.
ON { partition_scheme_name(partition_column_name) | filegroup | default }
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
Especifica o local de armazenamento do índice criado para a restrição. Se partition_scheme_name for especificado, o índice será particionado e as partições serão mapeadas para os grupos de arquivos especificados por partition_scheme_name. Se o grupo de arquivos for especificado, o índice será criado no grupo de arquivos nomeado. Se "default" for especificado ou se ON não for especificado, o índice será criado no mesmo grupo de arquivos que a tabela. Se ON for especificado quando um índice clusterizado for adicionado para uma restrição de CHAVE PRIMÁRIA ou EXCLUSIVO, toda a tabela será movida para o grupo de arquivos especificado quando o índice clusterizado for criado.
Neste contexto, default, não é uma palavra-chave. É um identificador para o grupo de arquivos padrão e deve ser delimitado, como em ON default ou ON [default]. Se o padrão for especificado, a opção deve estar ATIVADA QUOTED_IDENTIFIER para a sessão atual. Esta é a configuração padrão. Para obter mais informações, consulte SET QUOTED_IDENTIFIER (Transact-SQL).
NÃO APLICADO
No Microsoft Fabric Warehouse, as restrições de chave primária, chave exclusiva e chave estrangeira exigem NÃO IMPOSTO. A integridade das restrições deve ser mantida pelo aplicativo.
REFERÊNCIAS CHAVE ESTRANGEIRAS
É uma restrição que fornece integridade referencial para os dados na coluna. As restrições de CHAVE ESTRANGEIRA exigem que cada valor na coluna exista na coluna especificada na tabela referenciada.
schema_name
É o nome do esquema ao qual pertence a tabela referenciada pela restrição FOREIGN KEY.
referenced_table_name
É a tabela referenciada pela restrição FOREIGN KEY.
ref_column
É uma coluna entre parênteses referenciada pela nova restrição FOREIGN KEY.
EM EXCLUIR { NENHUMA AÇÃO | CASCATA | DEFINIR NULO | DEFINIR PADRÃO }
Especifica qual ação acontece com as linhas da tabela que são alteradas, se essas linhas tiverem uma relação referencial e a linha referenciada for excluída da tabela pai. O padrão é NO ACTION.
SEM AÇÃO
O Mecanismo de Banco de Dados do SQL Server gera um erro e a ação de exclusão na linha da tabela pai é revertida.
CASCADE
As linhas correspondentes são excluídas da tabela de referência se essa linha for excluída da tabela pai.
SET NULL
Todos os valores que compõem a chave estrangeira são definidos como NULL quando a linha correspondente na tabela pai é excluída. Para que esta restrição seja executada, as colunas de chave estrangeira devem ser nulas.
DEFINIR PADRÃO
Todos os valores que compõem a chave estrangeira são definidos como seus valores padrão quando a linha correspondente na tabela pai é excluída. Para que essa restrição seja executada, todas as colunas de chave estrangeira devem ter definições padrão. Se uma coluna for anulável e não houver nenhum valor padrão explícito definido, NULL torna-se o valor padrão implícito da coluna.
Não especifique CASCADE se a tabela será incluída em uma publicação de mesclagem que usa registros lógicos. Para obter mais informações sobre registros lógicos, consulte Alterações de grupo em linhas relacionadas com registros lógicos.
ON DELETE CASCADE não pode ser definido se já existir um INSTEAD OF gatilho ON DELETE na tabela que está sendo alterado.
Por exemplo, no banco de dados AdventureWorks2025, a tabela ProductVendor tem uma relação referencial com a tabela Vendor. O ProductVendor.
VendorID A chave estrangeira faz referência ao Vendor.
VendorID chave primária.
Se uma instrução DELETE for executada em uma linha da Vendor tabela e uma ação ON DELETE CASCADE for especificada para ProductVendor.VendorID, o Mecanismo de Banco de Dados verificará se há uma ou mais linhas dependentes na ProductVendor tabela. Se existirem, as linhas dependentes na ProductVendor tabela serão excluídas, além da linha referenciada Vendor na tabela.
Por outro lado, se NO ACTION for especificado, o Mecanismo de Banco de Dados gerará um erro e reverterá a ação de exclusão na Vendor linha quando houver pelo menos uma linha na tabela que faz referência a ProductVendor ela.
ON UPDATE { NENHUMA AÇÃO | CASCATA | DEFINIR NULO | DEFINIR PADRÃO }
Especifica qual ação acontece com as linhas na tabela alteradas quando essas linhas têm uma relação referencial e a linha referenciada é atualizada na tabela pai. O padrão é NO ACTION.
SEM AÇÃO
O Mecanismo de Banco de Dados gera um erro e a ação de atualização na linha da tabela pai é revertida.
CASCADE
As linhas correspondentes são atualizadas na tabela de referência quando essa linha é atualizada na tabela pai.
SET NULL
Todos os valores que compõem a chave estrangeira são definidos como NULL quando a linha correspondente na tabela pai é atualizada. Para que esta restrição seja executada, as colunas de chave estrangeira devem ser nulas.
DEFINIR PADRÃO
Todos os valores que compõem a chave estrangeira são definidos como seus valores padrão quando a linha correspondente na tabela pai é atualizada. Para que essa restrição seja executada, todas as colunas de chave estrangeira devem ter definições padrão. Se uma coluna for anulável e não houver nenhum valor padrão explícito definido, NULL torna-se o valor padrão implícito da coluna.
Não especifique CASCADE se a tabela será incluída em uma publicação de mesclagem que usa registros lógicos. Para obter mais informações sobre registros lógicos, consulte Alterações de grupo em linhas relacionadas com registros lógicos.
ON UPDATE CASCADE, SET NULL ou SET DEFAULT não podem ser definidos se já existir um gatilho ON UPDATE na tabela que está sendo alterada.
Por exemplo, no banco de dados AdventureWorks2025, a tabela ProductVendor tem uma relação referencial com a tabela Vendor. O ProductVendor.
VendorID A chave estrangeira faz referência ao Vendor.
VendorID chave primária.
Se uma instrução UPDATE for executada em uma linha na Vendor tabela e uma ON UPDATE CASCADE ação for especificada para ProductVendor.VendorID, o Mecanismo de Banco de Dados verificará se há uma ou mais linhas dependentes na ProductVendor tabela. Se existir, a linha dependente na ProductVendor tabela será atualizada, além da linha referenciada Vendor na tabela.
Por outro lado, se NO ACTION for especificado, o Mecanismo de Banco de Dados gerará um erro e reverterá a ação de atualização na Vendor linha quando houver pelo menos uma linha na tabela que faz referência a ProductVendor ela.
NÃO SE DESTINA À REPLICAÇÃO
Aplica-se a: SQL Server 2008 (10.0.x) e posterior.
Pode ser especificado para restrições de CHAVE ESTRANGEIRA e restrições de VERIFICAÇÃO. Se essa cláusula for especificada para uma restrição, ela não será imposta quando os agentes de replicação executarem operações de inserção, atualização ou exclusão.
CHECK
É uma restrição que impõe a integridade do domínio limitando os valores possíveis que podem ser inseridos em uma coluna ou colunas.
logical_expression
É uma expressão lógica usada em uma restrição CHECK e retorna TRUE ou FALSE.
logical_expression usados com restrições CHECK não podem fazer referência a outra tabela, mas podem fazer referência a outras colunas na mesma tabela para a mesma linha. A expressão não pode fazer referência a um tipo de dados de alias.
Remarks
Quando restrições FOREIGN KEY ou CHECK são adicionadas, todos os dados existentes são verificados quanto a violações de restrição, a menos que a WITH NOCHECK opção seja especificada. Se ocorrer alguma violação, ALTER TABLE falhará e um erro será retornado. Quando uma nova restrição de CHAVE PRIMÁRIA ou EXCLUSIVA é adicionada a uma coluna existente, os dados na coluna ou colunas devem ser exclusivos. Se forem encontrados valores duplicados, ALTER TABLE falhará. A WITH NOCHECK opção não tem efeito quando restrições de CHAVE PRIMÁRIA ou EXCLUSIVO são adicionadas.
Cada restrição PRIMARY KEY e UNIQUE gera um índice. O número de restrições UNIQUE e PRIMARY KEY não pode fazer com que o número de índices na tabela exceda 999 índices não clusterizados e 1 índice clusterizado. As restrições de chave estrangeira não geram automaticamente um índice. No entanto, colunas de chave estrangeira são freqüentemente usadas em critérios de junção de consulta, combinando a restrição de chave estrangeira de uma tabela com a coluna ou colunas de chave primária ou exclusiva na outra tabela. Um índice nas colunas de chave estrangeira permite que o Mecanismo de Banco de Dados encontre rapidamente dados relacionados na tabela de chaves estrangeiras.
Examples
Para obter exemplos, consulte ALTER TABLE (Transact-SQL).