MySQL ON DELETE CASCADE
Resumo: neste tutorial, você aprenderá como usar MySQL ON DELETE CASCADE
ação referencial para uma chave estrangeira para apagar dados de múltiplas tabelas relacionadas.
No tutorial anterior, você aprendeu como apagar dados de múltiplas tabelas relacionadas usando uma única instrução DELETE
. Entretanto, o MySQL fornece uma maneira mais efetiva chamada ON DELETE CASCADE
ação referencial para uma chave estrangeira que permite a você apagar dados de tabelas filhas automaticamente quando você apagar os dados da tabela pai.
MySQL ON DELETE CASCADE exemplo
Vejamos um exemplo de uso do MySQL ON DELETE CASCADE
.
Suponha que temos duas tabelas:buildings
e rooms
. Neste modelo de base de dados, cada edifício tem uma ou várias salas. No entanto, cada sala pertence a um único edifício. Uma sala não existiria sem um edifício.
A relação entre as tabelas buildings
e rooms
é de uma para muitas (1:N) como ilustrado no seguinte diagrama da base de dados:
Quando se apaga uma linha da tabela buildings
, também se quer apagar todas as linhas da tabela rooms
que se refere à linha da tabela buildings
. Por exemplo, quando você elimina uma linha com o número do edifício. 2 na tabela buildings
como a seguinte consulta:
Code language: SQL (Structured Query Language) (sql)
Você também quer que as linhas na tabela rooms
que se refere à construção número 2 também sejam removidas.
A seguir estão os passos que demonstram como funciona a ON DELETE CASCADE
ação referencial.
Passo 1. Crie o buildings
tabela:
Code language: SQL (Structured Query Language) (sql)
Passo 2. Criar a rooms
tabela:
Code language: SQL (Structured Query Language) (sql)
Note que a cláusula ON DELETE CASCADE
no final da definição da restrição de chave estrangeira.
Passo 3. Insira as linhas na tabela buildings
tabela:
Code language: SQL (Structured Query Language) (sql)
Passo 4. Consultar dados da tabela buildings
tabela:
Code language: SQL (Structured Query Language) (sql)
Temos duas linhas na tabela buildings
tabela.
Passo 5. Insira linhas na rooms
tabela:
Code language: SQL (Structured Query Language) (sql)
Passo 6. Consultar dados da tabela rooms
tabela:
Code language: SQL (Structured Query Language) (sql)
Temos três salas que pertencem ao edifício nº 1 e duas salas que pertencem ao edifício nº 2.
Passo 7. Apagar o edifício com o edifício no. 2:
Code language: SQL (Structured Query Language) (sql)
Passo 8. Consultar dados de rooms
tabela:
Code language: SQL (Structured Query Language) (sql)
Como você pode ver, todas as linhas que fazem referência a building_no
2 foram automaticamente apagadas.
Note que ON DELETE CASCADE
funciona apenas com tabelas com os motores de armazenamento que suportam chaves estrangeiras, por exemplo, InnoDB.
Alguns tipos de tabelas não suportam chaves estrangeiras como o MyISAM, então você deve escolher os mecanismos de armazenamento apropriados para as tabelas que você planeja usar o MySQL ON DELETE CASCADE
ação referencial.
Dicas para encontrar tabelas afetadas pelo MySQL SOBRE a ação DELETE CASCADE
Por vezes, é útil saber qual tabela é afetada pela ação referencial ON DELETE CASCADE
quando você exclui dados de uma tabela. Você pode consultar esses dados a partir de referential_constraints
no banco de dados information_schema
da seguinte forma:
Code language: SQL (Structured Query Language) (sql)
Por exemplo, para encontrar tabelas associadas com a tabela buildings
com a CASCADE
regra de exclusão no banco de dados classicmodels
, você usa a seguinte consulta:
Code language: SQL (Structured Query Language) (sql)