MySQL Integridade referencial

Pergunta por Danilson: Tem como deletar registros da tabela associada quando deletado da tabela principal?

Sim.

O negócio é compreender a integridade referencial, técnica que garante a consistência dos dados.

O primeiro passo é examinar as duas tabelas, se já tem programada alguma integridade:

SELECT
CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = 'nome_do_seu_banco_de_dados' AND
TABLE_NAME = '8200_conta_movimento' AND
REFERENCED_TABLE_NAME = '8000_livro_diario';

A consulta vai retornar as chaves estrangeiras da tabela vinculada 8200_conta_movimento que fazem referência à tabela principal 8000_livro_diario.

Executando no banco de dados de exemplo, “0 rows returned”, donde concluímos que não existem chaves estrangeiras na tabela vinculada.

Para criar (usando MySQL Workbench):

Na tabela vinculada (8200_conta_movimento ), abra a estrutura (ícone de ferramenta), nas abas selecione “Foreign Keys” (chaves estrangeiras), seguindo os passos:

  • Dê um nome para a chave, eu uso por padrão “fk_” seguido do some da tabela de referência: fk_8000_livro_diario;
  • Selecione a tabela de referência;
  • Os campos, primeiro da tabela vinculada, em seguida da tabela principal;
  • Nas opções, ajuste a ação “on delete” para “cascade”.

Pronto.

Se preferir pelo SQL:

ALTER TABLE `seu_banco`.`8200_conta_movimento` 
ADD INDEX `fk_8000_livro_diario_idx` (`codigo_lancamento` ASC);
;
ALTER TABLE `mysqladv360`.`8200_conta_movimento`
ADD CONSTRAINT `fk_8000_livro_diario`
FOREIGN KEY (`codigo_lancamento`)
REFERENCES `mysqladv360`.`8000_livro_diario` (`codigo_lancamento`)
ON DELETE CASCADE
ON UPDATE NO ACTION;

Com estas alterações:
Somente será possível incluir um registro na tabela vinculada se existir a referência na tabela principal e, ao excluir o registro da tabela principal, serão excluídos os associados da tabela vinculada.

Em tempo, uma síntese sobre chaves estrangeiras no MySQL:

Uma chave estrangeira no MySQL é uma restrição que pode ser aplicada entre duas tabelas para manter a integridade dos dados e definir a relação entre elas. Essa chave estrangeira garante que o valor em uma coluna ou conjunto de colunas corresponda a um valor existente na tabela referenciada, usualmente uma chave primária.

São características das “Chaves Estrangeiras”:
Integridade Referencial: Garante que as relações entre tabelas permaneçam consistentes. Por exemplo, não se pode inserir um registro numa tabela dependente (8200_conta_movimento) sem um correspondente na tabela principal (8000_livro_diario).
Ações em Cascata: Define o que acontece com os dados relacionados quando os dados referenciados são modificados (atualizados ou excluídos). As opções incluem:
CASCADE: Propaga a alteração para a tabela dependente.
SET NULL: Define a coluna da tabela dependente como NULL.
NO ACTION: Um erro é gerado se a alteração violar a integridade referencial.
RESTRICT: Similar ao NO ACTION, mas é avaliado imediatamente.

É isso.


Publicado

em

por

Tags:

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *