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

كيفية تنفيذ التحديثات الشرطية باستخدام INSERT... ON DUPLICATE KEY في SQL؟

تم النشر بتاريخ 2025-01-09
تصفح:656

How to Implement Conditional Updates with INSERT ... ON DUPLICATE KEY in SQL?

التحديثات المشروطة لإدراج ... على مفتاح مكرر

يعد إدراج السجلات أو تحديثها بناءً على شروط المفاتيح المكررة سيناريو شائعًا في برمجة قواعد البيانات . ومع ذلك، في بعض الأحيان قد تحتاج إلى تقييد شرط التحديث بشكل أكبر، مما يجعله يعتمد على معايير إضافية. لسوء الحظ، فإن بناء جملة INSERT... ON DUPLICATE KEY UPDATE لا يدعم أصلاً عبارات WHERE للتحديثات الشرطية.

التغلب على القيود

للتغلب على هذا القيد، عليك يمكن الاستفادة من الدالة IF() ضمن جملة UPDATE. تتيح لك الدالة IF() تحديد قيمة بديلة بناءً على تعبير منطقي محدد.

مثال للتنفيذ

خذ بعين الاعتبار ما يلي INSERT ... ON DUPLICATE KEY UPDATE استعلام:

INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
  last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);

في هذا الاستعلام، تحتوي جملة UPDATE على عبارة IF() التي تتحقق مما إذا كانت قيمة last_event_created_at الحالية أقل من القيمة التي يتم إدراجها. إذا كانت القيمة الحالية أقدم، فسيتم إجراء التحديث، واستبدال last_event_id بالقيمة الجديدة. بخلاف ذلك، سيتم الحفاظ على last_event_id الموجود.

اعتبارات إضافية

  • تذكر أن IF() يتم تقييمه إلى NULL إذا كان الشرط خاطئًا. ولذلك، فإن القيمة المحدثة لـ last_event_id ستكون أيضًا NULL إذا لم يتم استيفاء الشرط.
  • فكر في استخدام جملة WHERE إضافية أو استعلام UPDATE منفصل لضمان التصفية المطلوبة للتحديث.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3