Restrições de Chave Estrangeira – ON DELETE CASCADE e outras

Restrições de Chave Estrangeira

As restrições de chave estrangeira em tabelas de bancos de dados relacionais são um tipo especial de restrições (constraints) definidas e empregadas para excluir ou atualizar linhas em uma tabela referenciada, quando uma operação de um desses tipos ocorre em uma tabela relacionada.

As ações de exclusão e atualização são as seguintes:

  • ON DELETE CASCADE – Uma operação de exclusão em uma tabela referenciada se propaga (cascade = em cascata) para as chaves estrangeiras correspondentes. Ou seja, ao excluir um registro em uma tabela, um registro relacionado em outra tabela é automaticamente excluído. Por exemplo, se uma editora de uma tabela de editoras for excluída, os livros da tabela de livros relacionados com esta editora também serão excluídos automaticamente.
  • ON DELETE SET NULL – Quando ocorre uma operação de exclusão em uma tabela referenciada, as chaves estrangeiras relacionadas são definidas com valor NULL. Note que os campos de chave estrangeira precisam estar definidos como NULL (aceitar nulos) para que essa operação tenha sucesso.
  • ON DELETE SET DEFAULT – Ao ocorrer uma operação de exclusão em uma tabela referenciada, as chaves estrangeiras relacionadas em outras tabelas são definidas com um valor padrão (default).
  • ON UPDATE CASCADE – Uma operação de atualização em uma tabela referenciada se propaga para as chaves estrangeiras correspondentes. Ou seja, ao modificar um registro em uma tabela, um registro relacionado em uma coluna de chave estrangeira em outra tabela tem seu valor automaticamente atualizado.
  • ON UPDATE SET NULL – Quando uma operação de atualização em uma tabela referenciada é realizada, as chaves estrangeiras relacionadas são definidas com valor NULL. Novamente, os campos de chave estrangeira precisam estar definidos como NULL (aceitar nulos) para que a operação tenha sucesso.
  • ON UPDATE SET DEFAULT – Ao ocorrer uma operação de atualização em uma tabela referenciada, as chaves estrangeiras relacionadas em outras tabelas serão definidas com um valor padrão.

Portanto, usamos a opção CASCADE quando há uma restrição de existência obrigatória para um campo de chave estrangeira de uma tabela. Já as opções SET NULL e DEFAULT se aplicam quando a existência de um valor é opcional no campo de chave estrangeira.

DELETE RESTRICTED e UPDATE RESTRICTED

Alguns sistemas de bancos de dados, como o IBM DB2, possuem restrições de chave estrangeira adicionais, como explicado a seguir:

  • DELETE RESTRICTED – Linhas na tabela referenciada (com a chave primária) somente podem ser excluídas se não houver valores de chave estrangeira correspondentes na tabela relacionada. Ou seja, só podemos excluir uma linha na tabela se ainda não existir nenhum registro relacionado com um valor de chave primária da tabela. Por exemplo, somente é possível excluir um autor da tabela de autores se ainda não houver nenhum livro daquele autor cadastrado na tabela de livros (onde o ID do autor é a chave estrangeira do relacionamento).
  • UPDATE RESTRICTED – Idem ao anterior, porém para a operação de atualização de registros na tabela.

Veja exemplos da aplicação dessas restrições em um banco de dados MySQL aqui.

 

Sobre Fábio dos Reis (1379 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*