التعامل مع النطاقات الزمنية المتداخلة في MySQL
قد يكون إدراج نطاقات زمنية جديدة في جدول موجود أمرًا صعبًا، خاصة عند محاولة منع التداخلات مع الإدخالات الموجودة. في هذا السياق، نريد تجنب إدراج نطاقات تتداخل مع تلك الموجودة في قاعدة البيانات لمعرف حساب محدد (acc_id).
بينما توفر MySQL خيار التحقق من صحة التواريخ باستخدام قيود SQL CHECK، إلا أن هذه الميزة ليست متاحة للأسف. بدعم من MySQL. من ناحية أخرى، يدعم PostgreSQL قيود التحقق، لكن تبديل محركات قاعدة البيانات قد لا يكون ممكنًا في جميع المواقف.
كبديل، يمكننا تنفيذ التحقق من الصحة في منطق التطبيق. يتضمن أحد الأساليب استخدام عبارة SELECT COUNT(id)... للتحقق من التداخلات قبل محاولة INSERT:
SELECT COUNT(id) FROM avail WHERE acc_id = '175' AND (start_date BETWEEN '2015-05-30' AND '2015-06-04') OR (end_date BETWEEN '2015-05-30' AND '2015-06-04') OR ('2015-05-30' BETWEEN start_date AND end_date) OR ('2015-06-04' BETWEEN start_date AND end_date);
إذا كان العدد الذي تم إرجاعه أكبر من 0، فسيتم إحباط عملية الإدراج بسبب التداخل.
تتضمن طريقة أخرى استخدام الزناد في MySQL. يمكن برمجة المشغل للتحقق من التداخلات قبل حدوث INSERT/UPDATE وإلقاء خطأ في حالة العثور على أي خطأ. ومع ذلك، تتطلب المشغلات إصدارًا محدثًا من MySQL.
في النهاية، يعتمد اختيار النهج على المتطلبات المحددة لتطبيقك وجدوى تنفيذه بإحدى الطرق المدعومة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3