Desactivación temporal de restricciones de clave externa en MySQL
En MySQL, las restricciones de clave externa imponen la integridad referencial, lo que garantiza la coherencia de los datos en las tablas relacionadas. Sin embargo, hay escenarios en los que es necesario deshabilitar temporalmente estas restricciones, como durante la eliminación de modelos.
Considere los siguientes modelos de Django con relaciones mutuas de clave externa:
class Item(models.Model): style = models.ForeignKey('Style', on_delete=models.CASCADE) class Style(models.Model): item = models.ForeignKey('Item', on_delete=models.CASCADE)
Intentar eliminar una instancia de ambos modelos secuencialmente puede generar un error:
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 evitar esta restricción de clave externa, puede deshabilitarla temporalmente usando uno de los siguientes métodos:
1. DISABLE KEYS:
ALTER TABLE myapp_item DISABLE KEYS;
Este comando vuelve a habilitar las restricciones una vez que la tabla se vuelve a abrir o cerrar.
2. ESTABLECER FOREIGN_KEY_CHECKS:
SET FOREIGN_KEY_CHECKS = 0; # Disable foreign key checks
Recuerde volver a habilitar las restricciones después de la operación de eliminación:
SET FOREIGN_KEY_CHECKS = 1; # Re-enable foreign key checks
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3