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
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