Articles

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

evendorstabelas é 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 para NULL 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ão NULL 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 para NULL 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.