chave estrangeira do servidor de SQL
Resumo: neste tutorial, irá aprender a usar a restrição de chave estrangeira do servidor de SQL para impor uma ligação entre os dados em duas tabelas.
Introdução ao SQL Server restrição de chave externa
Considere o seguinte vendor_groups
e vendors
tabelas
Cada fornecedor pertence a um fornecedor do grupo e de cada fornecedor de grupo pode ter zero ou mais fornecedores. A relação entre o id
evendors
tabelas é de um para muitos.,
Para cada linha vendors
tabela, você pode sempre encontrar uma linha correspondente na vendor_groups
tabela.
no entanto, com a configuração das tabelas actuais, poderá inserir uma linha na tabelavendors
sem uma linha correspondente na tabelavendor_groups
. Da mesma forma, você também pode remover uma linha na tabela vendor_groups
sem actualizar ou apagar as linhas correspondentes na tabela vendors
que resulta em linhas órfãs na tabela vendors
.,
Para reforçar a ligação entre os dados de vendor_groups
e vendors
tabelas, você precisa estabelecer uma chave estrangeira em vendors
tabela.
uma chave estrangeira é uma coluna ou um grupo de colunas de uma tabela que identifica unicamente uma linha de outra tabela (ou a mesma tabela em caso de auto-referência).
para criar uma chave estrangeira, você usa a restrição FOREIGN KEY
.,
As seguintes instruções drop vendors
tabela e recriá-lo com um FOREIGN KEY
restrição:
vendor_groups
tabela é chamada de tabela principal que é a tabela para que a restrição de chave estrangeira que referencia. The vendors
table is called the child table that is the table to which the foreign key constraint is applied.,
Na declaração acima, a cláusula seguinte cria um FOREIGN KEY
restrição de chamada fk_group
links group_id
vendors
tabela group_id
vendor_groups
tabela:
SQL Server restrição de CHAVE ESTRANGEIRA sintaxe
A sintaxe geral para a criação de uma FOREIGN KEY
restrição é a seguinte:
Vamos examinar essa sintaxe em detalhe.,
Primeiro, especifique o FOREIGN KEY
nome da restrição após o CONSTRAINT
palavra-chave. O nome da restrição é opcional, portanto, é possível definir um FOREIGN KEY
restrição da seguinte forma:
neste caso, o SQL Server irá gerar automaticamente um nome para o FOREIGN KEY
restrição.
Em segundo lugar, especifique uma lista de colunas chave estrangeiras separadas por vírgulas incluídas por parêntesis após o FOREIGN KEY
palavra-chave.,
Em terceiro lugar, indique o nome da tabela-mãe para a qual as referências da chave estrangeira e uma lista de colunas separadas por vírgulas que têm uma ligação com a coluna da tabela-filhos.
SQL Server restrição de CHAVE ESTRANGEIRA exemplo
em Primeiro lugar, insira algumas linhas em vendor_groups
tabela:
em Segundo lugar, inserir um novo fornecedor com um fornecedor do grupo para o vendors
tabela:
Code language: SQL (Structured Query Language) (sql)
A instrução funcionou como o esperado.,
o Terceiro, tente inserir um novo fornecedor, cujo fornecedor não existe o grupo de vendor_groups
tabela:
Code language: SQL (Structured Query Language) (sql)
o SQL Server emitiu o seguinte erro:
neste exemplo, por causa de FOREIGN KEY
restrição, O SQL Server rejeitou a inserir e emitido um erro.
acções referenciais
a restrição de chave estrangeira assegura a integridade referencial. Isso significa que você só pode inserir uma linha na tabela filhos se houver uma linha correspondente na tabela pai.,
Além disso, a restrição de chave externa permite a você definir as ações referencial quando a linha na tabela pai é atualizado ou excluído da seguinte forma:
ON UPDATE
e ON DELETE
especifica qual ação será executada quando uma linha na tabela pai é atualizadas e excluídas., A seguir são permitidas acções : NO ACTION
CASCADE
SET NULL
e SET DEFAULT
acções de eliminação de linhas na tabela pai
Se você excluir uma ou mais linhas na tabela principal, você pode definir uma das ações a seguir:
-
ON DELETE NO ACTION
: o SQL Server gera um erro e traz de volta a ação de exclusão sobre a linha da tabela principal. -
ON DELETE CASCADE
: O servidor SQL apaga as linhas da tabela-filhos que corresponde à linha apagada da tabela-mãe., -
ON DELETE SET NULL
: o SQL Server define as linhas na tabela filho paraNULL
se as linhas correspondentes na tabela principal são excluídos. Para executar esta acção, as colunas-chave estrangeiras devem ser invioláveis. -
ON DELETE SET DEFAULT
SQL Server define as linhas na tabela filho para seus valores padrão, se as linhas correspondentes na tabela principal são excluídos. Para executar esta ação, as colunas de chaves estrangeiras devem ter definições padrão. Note que uma coluna invulável tem um valor por omissãoNULL
se não for indicado nenhum valor por omissão.,
por omissão, o servidor de SQL aplicaON DELETE NO ACTION
se não indicar explicitamente qualquer acção.
actualizar a acção das linhas na tabela-mãe
Se actualizar uma ou mais linhas na tabela-mãe, poderá definir uma das seguintes acções:
-
ON UPDATE NO ACTION
: O servidor de SQL levanta um erro e inverte a acção de actualização da linha na tabela-mãe. -
ON UPDATE CASCADE
: O servidor SQL actualiza as linhas correspondentes na tabela-filhos quando as linhas da tabela-mãe são actualizadas., -
ON UPDATE SET NULL
: o SQL Server define as linhas na tabela filho paraNULL
quando a linha correspondente na tabela pai é atualizado. Note que as colunas de chave estrangeiras devem ser nulas para que esta acção possa ser executada. -
ON UPDATE SET DEFAULT
: O servidor SQL define os valores por omissão para as linhas da tabela-filhos que têm as linhas correspondentes na tabela-mãe actualizadas.