SQLShack (Português)
No artigo anterior Comumente usado SQL Server Restrições: NÃO é NULO, ÚNICA e CHAVE PRIMÁRIA, nós descrito, em detalhe, os três primeiros tipos do SQL Server restrições; NÃO NULO, ÚNICA e CHAVE PRIMÁRIA. Neste artigo, discutiremos as outras três restrições: chave estrangeira, verificação e DEFAULT, descrevendo cada uma brevemente e fornecendo exemplos práticos.,
restrição de chave estrangeira
Uma chave estrangeira é uma chave de base de dados que é usada para ligar duas tabelas juntas. A restrição de chave estrangeira identifica as relações entre as tabelas de banco de dados por referência a uma coluna, ou conjunto de colunas, na tabela-filhos que contém a chave estrangeira, para a coluna da chave primária ou conjunto de colunas, na tabela-mãe.
a relação entre a criança e as tabelas-mãe é mantida verificando a existência da tabela-filhos valores-chave estrangeiros na chave-mãe da tabela-mãe referenciada antes de inserir estes valores na tabela-filhos., Desta forma, a restrição de chave estrangeira, na tabela-filhos que referencia a chave primária na tabela-mãe, irá impor a integridade referencial do banco de dados. A integridade referencial garante que a relação entre as tabelas de banco de dados é preservada durante o processo de inserção de dados. Recordar que a restrição principal da chave garante que não serão inseridos nessa tabela valores nulos ou duplicados para a coluna ou colunas selecionadas, reforçando a integridade da entidade para essa tabela., A integridade da entidade imposta pela chave primária e a integridade referencial imposta pela chave estrangeira juntos formam a integridade chave.
a restrição de chave estrangeira difere da restrição de chave primária na medida em que, você pode criar apenas uma chave primária por cada tabela, com a capacidade de criar várias restrições de chave estrangeiras em cada tabela, Referenciando a tabela-mãe múltipla. Outra diferença é que a chave estrangeira permite inserir valores nulos se não houver nenhuma restrição nula definida nesta chave, mas a chave primária não aceita NULLs.,
A restrição de chave estrangeira oferece-lhe também a capacidade de controlar as medidas que serão tomadas quando o valor referenciado na tabela-mãe for actualizado ou eliminado, usando as cláusulas de actualização ON e de eliminação. As acções suportadas que podem ser tomadas ao apagar ou actualizar os valores da tabela-mãe incluem:
- nenhuma acção: quando as cláusulas ‘ON UPDATE’ ou ‘DELETE’ forem definidas como sem acção, a operação de actualização ou remoção realizada na tabela-mãe irá falhar com um erro.,
- CASCADE: se a opção ON UPDATE ou ON DELETE clauses for CASCADE, a mesma acção realizada nos valores referenciados da tabela-mãe será reflectida nos valores relacionados na tabela-filhos. Por exemplo, se o valor referenciado for deletado na tabela pai, todas as linhas relacionadas na tabela filho também são deletadas.
- SET NULL: com isto na opção UPDATE e DELETE clauses, se os valores referenciados na tabela-mãe forem apagados ou modificados, todos os valores relacionados na tabela-filhos são configurados como valor nulo.,
- define o valor por omissão: usando a opção por omissão definida das cláusulas “ON UPDATE” e “DELETE clauses” especifica que, se os valores referenciados na tabela-mãe forem actualizados ou apagados, os valores relacionados na tabela-filhos com colunas de chave estrangeiras serão ajustados ao seu valor por omissão.
você pode adicionar a restrição de chave estrangeira enquanto define a coluna usando a instrução CREATE TABLE T-SQL, ou adicioná-la após a criação da tabela usando a instrução ALTER TABLE T-SQL. Vamos criar duas novas tabelas para entender a funcionalidade de restrição de chave estrangeira., A primeira tabela atuará como a tabela-mãe com a coluna ID definida como uma coluna de chave primária. A segunda tabela atuará como a tabela filhos, com a coluna ID definida como a coluna chave estrangeira que referencia a coluna ID na tabela-mãe.,> ID INT PRIMARY KEY,
Depois de criar duas tabelas, vamos inserir três registros para a tabela pai e dois registros para a tabela filho, usando as seguintes instruções INSERT:
O resultado irá mostrar-lhe que os três registros são inseridas com êxito a tabela pai., O primeiro registro que tentamos inserir na tabela-filhos é inserido sem qualquer erro, já que o valor ID 1 já existe na tabela-mãe.,porque o valor de ID de 4 não existe na tabela pai, e devido à restrição de CHAVE ESTRANGEIRA, você não será capaz de inserir um valor de IDENTIFICAÇÃO para a criança tabela que não existe na tabela pai:
Verificando as tabelas pai e filho de conteúdo, você vai ver que apenas um registro é inserido na tabela filho, como você pode ver abaixo:
Como nós não mencionar a restrição de CHAVE EXTERNA nome ao criar a criança tabela, o SQL Server irá atribuir-lhe um nome exclusivo que podemos obter a partir do INFORMATION_SCHEMA.,TABLE_CONSTRAINTS system view using the following query:
1
2
3
4
5
6
7
8
|
SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
ADICIONAR RESTRIÇÃO FK__ConstraintDe__ID
FOREIGN KEY (ID) REFERÊNCIAS ConstraintDemoParent(ID);
|
A operação irá falhar, como o valor de ID de 4 não existe na tabela pai e rompe a integridade referencial entre a criança e os pais tabelas, como pode ser visto na seguinte mensagem de erro:
Para ser capaz de criar a restrição de CHAVE EXTERNA na tabela filho, temos que eliminar o conflito primeiro por excluir ou atualizar esse registro., Here we will try to modify the ID value with the following UPDATE command:
1
2
3
|
UPDATE ., DEFINIR ID =2 ONDE ID = 4
|
Agora, a restrição de CHAVE ESTRANGEIRA será criado com êxito, sem qualquer erro, como mostrado abaixo:
UMA restrição de CHAVE ESTRANGEIRA pode ser definido com a ajuda do SQL Server Management Studio ferramenta. Clique com o botão direito na tabela necessária e selecione a opção de projeto.,> A partir da janela exibida, você pode facilmente especificar o nome da restrição de CHAVE ESTRANGEIRA, tabelas e colunas que irão participar nessa relação, clicando nas Tabelas E Colunas Especificação, se verificar os dados existentes é necessário, e, finalmente, a ação executada quando o referido registro é excluído ou modificado o pai da tabela, como mostrado abaixo:
Restrição de VERIFICAÇÃO
UMA restrição de VERIFICAÇÃO é definido em uma coluna ou conjunto de colunas para limitar o intervalo de valores que podem ser inseridos em uma dessas colunas, usando uma determinada condição., A restrição de verificação entra em ação para avaliar os valores inseridos ou modificados, onde o valor que satisfaz a condição será inserido na tabela, caso contrário, a operação de inserção será descartada. É permitido especificar várias restrições de verificação para a mesma coluna.
definir a condição de restrição de verificação é de alguma forma semelhante a escrever a cláusula onde de uma consulta, usando os diferentes operadores de comparação, como e, ou, entre, como e é nulo para escrever sua expressão booleana que irá retornar verdadeiro, falso ou desconhecido., A restrição de verificação irá devolver o valor desconhecido quando um valor nulo estiver presente na condição. A restrição de verificação é usada principalmente para impor a integridade do domínio, limitando os valores inseridos para aqueles que seguem os valores definidos, range ou regras de formato.
vamos criar uma nova tabela simples que tem três colunas; a coluna ID que é considerada como a chave primária dessa tabela, nome e salário. Uma restrição de verificação é definida na coluna de salário para se certificar de que nenhum valor zero ou negativo são inseridos nessa coluna.,v>6
Se você executar o abaixo três instruções INSERT:
é claro a partir do resultado gerado que o primeiro registro é inserido com nenhum erro, desde o valor do Salário atende a verificação da condição.,rovided Salário valores não atendem a restrição de VERIFICAÇÃO de condição, devido à inserção de zero e negativo Salário valores, como você pode ver na seguinte mensagem de erro:
Verificar os dados da tabela mostra que apenas a primeira linha que passou a restrição de VERIFICAÇÃO de condição será inserido a tabela abaixo:
Nós mencionados anteriormente neste artigo que a restrição de VERIFICAÇÃO permite a inserção de valores NULOS se a participou colunas NULL, e valores NULOS serão avaliados como DESCONHECIDO sem lançar qualquer erro., Isso é claro a partir do abaixo registro inserido com sucesso, embora o valor fornecido do Salário coluna é NULL:
Se você rever a restrição de VERIFICAÇÃO da definição anterior, na instrução CREATE TABLE, você vai ver que não mencionei o nome do definido restrição. Neste caso, o servidor SQL irá atribuir um nome único para essa restrição que pode ser mostrado questionando o INFORMATION_SCHEMA.TABLE_CONSTRAINTS system view para a tabela ConstraintDemo4., O resultado será como mostrado abaixo:
a restrição de verificação pode ser largada usando a instrução ALTER TABLE T-SQL.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:
1
2
3
4
5
|
ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);
|
Adding the CHECK constraint will fail., Isto é devido ao fato de que, enquanto o SQL Server está a verificar os dados já existentes para a VERIFICAÇÃO de condição de restrição, um ou mais valores que não satisfaçam a condição de restrição são encontrados, como você pode ver na seguinte mensagem de erro:
Para ser capaz de definir a restrição de VERIFICAÇÃO novamente, devemos modificar ou eliminar os dados que impede a restrição que está sendo criado.,de484761″>
Agora, a restrição de VERIFICAÇÃO pode ser definido com nenhum problema, como mostrado abaixo:
o SQL Server permite-lhe desactivar a restrição de VERIFICAÇÃO para casos especiais, como inserir enorme quantidade de dados sem se preocupar com a reunião da condição de restrição para fins de teste, ou devido à mudança na lógica de negócios., Este caso é válido apenas para a verificação e restrições de chave estrangeiras que você pode desativar temporariamente.,escrevendo o nome da restrição, como no comando T-SQL abaixo:
1
2
3
|
ALTER TABLE ConstraintDemo4 NOCHECK RESTRIÇÃO de TODOS os
|
a Partir de uma restrição de VERIFICAÇÃO de definição, você pode especificar que a restrição será criado sem a verificação de linhas existentes, mas a restrição será marcado como não confiáveis., pode activar todas as restrições de VERIFICAÇÃO, todos de uma vez,usando o comando T-SQL abaixo:
1
2
3
|
ALTER TABLE ConstraintDemo4 RESTRIÇÃO de VERIFICAÇÃO de TODOS os
|
Enquanto permitindo que o anterior restrição de VERIFICAÇÃO, você vai ver que o SQL Server não vai reclamar sobre o não verificado dados, que rompe com a condição de restrição., Neste caso, a integridade do domínio dos dados não é mantida.
para corrigir este problema, o comando DBCC CHECKCONSTRAINTS pode ser facilmente usado para identificar os dados que violam a condição de restrição em uma tabela ou restrição especificada, tendo em consideração não executar esse comando nas horas de pico, pois isso afetará o desempenho do servidor SQL devido a não utilizar um instantâneo de banco de dados.,v id=”ff419aa09d”>
O resultado irá mostrar-lhe a dois Salários valores que quebrar a restrição de VERIFICAÇÃO de condição, como mostrado abaixo:
UMA restrição de VERIFICAÇÃO também pode ser criado com a ajuda do SQL Server Management Studio ferramenta, clicando com o botão direito na tabela e selecionando a opção de Design., Na janela de Desenho, clique com o botão direito do mouse e escolha Restrições de Verificação de opção da seguinte forma:
a Partir da Verificação de Restrições de janela, você pode especificar a restrição de VERIFICAÇÃO de nome, de expressão e de se verificar os dados existentes é necessário, como mostrado abaixo:
PADRÃO de Restrição
UM PADRÃO de restrição é utilizada para fornecer um valor de coluna predefinido para as linhas inseridas se nenhum valor for especificado para a coluna na instrução INSERT., A restrição padrão ajuda a manter a integridade do domínio, fornecendo valores adequados para a coluna, no caso de o Usuário não fornecer um valor para ele. O valor padrão pode ser um valor constante, um valor de função do sistema ou nulo.,elow:
1
2
3
4
|
ALTER TABLE ConstraintDemo5
Adicionar Restrição DF__Restringir__Emplo PADRÃO (GETDATE()) PARA EmployeeDate
|
além disso, o PADRÃO de restrição pode ser definida usando o SQL Server Management Studio, clicando com o botão direito na tabela e escolher a opção de Design., Em seguida, seleccione a coluna para a qual irá atribuir um valor por omissão, navegando pela janela de Propriedades da coluna, como se mostra abaixo:
i esperava que este artigo, e o anterior, tivessem ajudado a explicar os seis tipos de restrições do servidor SQL. Por favor, sinta-se livre para fazer quaisquer perguntas nos comentários abaixo.,unigénito do SQL Server usados Restrições: NÃO é NULO, UNIQUE e PRIMARY KEY
links
- Criar Restrições de Verificação
- Limitações
- Predefinições
- Criar Relações de Chave Estrangeira
- Restrições de VERIFICAÇÃO
- Autor
- Posts Recentes
Também, ele está contribuindo com suas dicas de SQL em muitos blogs.,
Ver todos os posts por Ahmad Yaseen
- Como monitor Azure Dados de Fábrica – em 15 de janeiro de 2021
- Usando o Controle de Origem no Azure Dados de Fábrica de 12 de janeiro, 2021
- Usando Modelos no Azure Dados de Fábrica, 8 de janeiro de 2021