MySQL で外部キー制約を一時的に無効にする方法は?

Mary-Kate Olsen
リリース: 2024-11-07 09:23:03
オリジナル
641 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!