"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como desabilitar temporariamente restrições de chave estrangeira no MySQL?

Como desabilitar temporariamente restrições de chave estrangeira no MySQL?

Publicado em 2024-11-18
Navegar:906

How to Temporarily Disable Foreign Key Constraints in MySQL?

Desativação temporária de restrições de chave estrangeira no MySQL

No MySQL, as restrições de chave estrangeira impõem a integridade referencial, garantindo a consistência dos dados nas tabelas relacionadas. No entanto, existem cenários em que é necessário desabilitar temporariamente essas restrições, como durante exclusões de modelos.

Considere os seguintes modelos Django com relacionamentos mútuos de chave estrangeira:

class Item(models.Model):
    style = models.ForeignKey('Style', on_delete=models.CASCADE)

class Style(models.Model):
    item = models.ForeignKey('Item', on_delete=models.CASCADE)

A tentativa de excluir uma instância de ambos os modelos sequencialmente pode resultar em um erro:

cursor.execute("DELETE FROM myapp_item WHERE n = %s", n)
transaction.commit_unless_managed()  # foreign key constraint fails here

cursor.execute("DELETE FROM myapp_style WHERE n = %s", n)
transaction.commit_unless_managed()

Para ignorar essa restrição de chave estrangeira, você pode desativá-la temporariamente usando um dos seguintes métodos:

1. DISABLE KEYS:

ALTER TABLE myapp_item DISABLE KEYS;

Este comando reativa as restrições quando a tabela é reaberta ou fechada.

2. SET FOREIGN_KEY_CHECKS:

SET FOREIGN_KEY_CHECKS = 0;  # Disable foreign key checks

Lembre-se de reativar as restrições após a operação de exclusão:

SET FOREIGN_KEY_CHECKS = 1;  # Re-enable foreign key checks
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3