ホームページ  >  記事  >  バックエンド開発  >  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。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。