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
以上がMySQL で外部キー制約を一時的に無効にする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。