Временное отключение ограничений внешнего ключа в MySQL
В MySQL ограничения внешнего ключа обеспечивают ссылочную целостность, обеспечивая согласованность данных в связанных таблицах. Однако существуют сценарии, в которых временное отключение этих ограничений необходимо, например, во время удаления модели.
Рассмотрим следующие модели Django с взаимными отношениями внешних ключей:
class Item(models.Model): style = models.ForeignKey('Style', on_delete=models.CASCADE) class Style(models.Model): item = models.ForeignKey('Item', on_delete=models.CASCADE)
Попытка последовательного удаления экземпляра обеих моделей может привести к ошибке:
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()
Чтобы обойти это ограничение внешнего ключа, вы можете временно отключить его, используя один из следующих методов:
1. DISABLE KEYS:
ALTER TABLE myapp_item DISABLE KEYS;
Эта команда повторно включает ограничения после повторного открытия или закрытия таблицы.
2. SET FOREIGN_KEY_CHECKS:
SET FOREIGN_KEY_CHECKS = 0; # Disable foreign key checks
Не забудьте повторно включить ограничения после операции удаления:
SET FOREIGN_KEY_CHECKS = 1; # Re-enable foreign key checks
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3