«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как временно отключить ограничения внешнего ключа в MySQL?

Как временно отключить ограничения внешнего ключа в MySQL?

Опубликовано 18 ноября 2024 г.
Просматривать:667

How to Temporarily Disable Foreign Key Constraints in MySQL?

Временное отключение ограничений внешнего ключа в 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