التعطيل المؤقت لقيود المفاتيح الخارجية في 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