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)

Deixe uma resposta

O seu endereço de email não será publicado.