logo

MySQL EM DELETE CASCADE

A cláusula ON DELETE CASCADE no MySQL é usada para automaticamente remover os registros correspondentes da tabela filho quando excluímos as linhas da tabela pai. É uma espécie de ação referencial relacionada ao chave estrangeira .

Suponha que criamos duas tabelas com uma FOREIGN KEY em um relacionamento de chave estrangeira, tornando ambas as tabelas pai e filho. A seguir, definimos uma cláusula ON DELETE CASCADE para uma FOREIGN KEY que deve ser definida para que a outra tenha sucesso nas operações em cascata. Se ON DELETE CASCADE for definido apenas para uma cláusula FOREIGN KEY, as operações em cascata gerarão um erro.

MySQL ON DELETE CASCADE Exemplo

Vamos entender como podemos usar a cláusula ON DELETE CASCADE na tabela MySQL. Primeiro, vamos criar duas tabelas chamadas Funcionário e Pagamento . Ambas as tabelas estão relacionadas através de uma chave estrangeira com operação em cascata de exclusão. Aqui, um Funcionário é o tabela pai , e o Pagamento é o mesa infantil . Os scripts a seguir criam ambas as tabelas junto com seus registros.

Tabela: Funcionário

A instrução a seguir cria uma tabela Employee:

 CREATE TABLE Employee ( emp_id int(10) NOT NULL, name varchar(40) NOT NULL, birthdate date NOT NULL, gender varchar(10) NOT NULL, hire_date date NOT NULL, PRIMARY KEY (emp_id) ); 

A seguir, execute a consulta insert para preencher os registros.

 INSERT INTO Employee (emp_id, name, birthdate, gender, hire_date) VALUES (101, 'Bryan', '1988-08-12', 'M', '2015-08-26'), (102, 'Joseph', '1978-05-12', 'M', '2014-10-21'), (103, 'Mike', '1984-10-13', 'M', '2017-10-28'), (104, 'Daren', '1979-04-11', 'M', '2006-11-01'), (105, 'Marie', '1990-02-11', 'F', '2018-10-12'); 

Execute a consulta SELECT para verificar os dados em uma tabela, que pode ser mostrada abaixo:

10 de 50
MySQL EM DELETE CASCADE

Tabela: Pagamento

A instrução abaixo cria uma tabela Pagamento:

 CREATE TABLE Payment ( payment_id int(10) PRIMARY KEY NOT NULL, emp_id int(10) NOT NULL, amount float NOT NULL, payment_date date NOT NULL, FOREIGN KEY (emp_id) REFERENCES Employee (emp_id) ON DELETE CASCADE ); 

A seguir, execute o inserir instrução para preencher os registros em uma tabela.

 INSERT INTO Payment (payment_id, emp_id, amount, payment_date) VALUES (301, 101, 1200, '2015-09-15'), (302, 101, 1200, '2015-09-30'), (303, 101, 1500, '2015-10-15'), (304, 101, 1500, '2015-10-30'), (305, 102, 1800, '2015-09-15'), (306, 102, 1800, '2015-09-30'); 

Execute a consulta SELECT para verificar os dados em uma tabela, que pode ser mostrada abaixo:

MySQL EM DELETE CASCADE

Deixe-nos excluir dados da tabela pai Employee. Para fazer isso, execute a seguinte instrução:

 mysql> DELETE FROM Employee WHERE emp_id = 102; 

A declaração acima excluirá os registros dos funcionários cujos emp_id = 102 e referenciando dados na tabela filho. Podemos verificar os dados usando a instrução SELECT que fornecerá a seguinte saída:

MySQL EM DELETE CASCADE

Na saída acima, podemos ver que todas as linhas referenciadas a emp_id = 102 foram excluídas automaticamente de ambas as tabelas.

Como encontrar a tabela afetada pela ação ON DELETE CASCADE?

Às vezes, antes de excluir registros da tabela, queremos conhecer a tabela afetada pela ação referencial ON DELETE CASCADE. Podemos encontrar essas informações consultando referencial_constraints no banco de dados information_schema da seguinte maneira:

 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'database_name' AND referenced_table_name = 'parent_table' AND delete_rule = 'CASCADE' 

A instrução abaixo produz o resultado sobre as tabelas associadas à tabela Employee com a regra ON DELETE CASCADE no funcionáriodb base de dados:

inteiro para string java
 USE information_schema; SELECT table_name FROM referential_constraints WHERE constraint_schema = 'employeedb' AND referenced_table_name = 'Employee' AND delete_rule = 'CASCADE'; 

Após executar o comando acima, obteremos a saída abaixo:

MySQL EM DELETE CASCADE

MySQL EM CASCADA DE ATUALIZAÇÃO

Cláusula ON UPDATE CASCADE em MySQL é usado para atualizar os registros correspondentes da tabela filho automaticamente quando atualizamos as linhas na tabela pai. O exemplo a seguir explica isso mais claramente.

Primeiro, precisamos usar o ALTERAR A TABELA instrução para adicionar a cláusula ON UPDATE CASCADE na tabela Pagamento conforme abaixo:

 ALTER TABLE Payment ADD CONSTRAINT `payment_fk` FOREIGN KEY(emp_id) REFERENCES Employee (emp_id) ON UPDATE CASCADE; 

Ele dará a seguinte saída:

MySQL EM DELETE CASCADE

No script abaixo, atualizaremos o id do funcionário na tabela pai, e isso refletirá automaticamente essa alteração também na tabela filho:

 mysql> UPDATE Employee SET emp_id = 102 WHERE emp_id = 103; 

Verificando o conteúdo da tabela Funcionário e Pagamento, veremos que emp_id os valores da coluna serão atualizados com sucesso.

MySQL EM DELETE CASCADE