首頁  >  文章  >  後端開發  >  如何暫時停用MySQL中的外鍵約束?

如何暫時停用MySQL中的外鍵約束?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-07 09:23:03643瀏覽

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.停用鍵:

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
刪除操作後記得重新啟用約束:

以上是如何暫時停用MySQL中的外鍵約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn