"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تعطيل قيود المفاتيح الخارجية مؤقتًا في MySQL؟

كيفية تعطيل قيود المفاتيح الخارجية مؤقتًا في MySQL؟

تم النشر بتاريخ 2024-11-18
تصفح:874

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. تعيين 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