عند تحديث عمود عليه قيد UNIQUE، قد يتعارض تغيير صف مع قيمة لا تزال موجودة في صف آخر. يمكن أن يحدث ذلك حتى لو كانت القيم النهائية المخطط لها مختلفة. مثلًا، زيادة القيمتين واحد واثنين بمقدار واحد تستهدف النتيجة اثنين وثلاثة، لكن تعديل الواحد أولًا يصطدم بالاثنين الموجود.
في تحديث جدول واحد، يسمح MySQL باستخدام ORDER BY لتحديد ترتيب تعديل الصفوف. عند زيادة سلسلة من القيم الفريدة الموجبة، يتيح البدء بالقيمة الأكبر إخلاء المجال للقيمة التالية. في المثال البسيط يتحول الاثنان إلى ثلاثة، ثم يصبح من الممكن تحويل الواحد إلى اثنين دون تعارض.
مثال
UPDATE planets
SET position_no = position_no + 1
ORDER BY position_no DESC;
هذه معالجة مرتبطة بطبيعة الحساب والبيانات، وليست قاعدة تجعل كل تحديث لقيم فريدة آمنًا. يجب فحص النتائج والحدود وأي قيم أخرى قد تتعارض مع التعديل المطلوب.
باختصار: ترتيب التحديث تنازليًا يمنع التعارض المؤقت في مثال زيادة القيم الفريدة المتتابعة.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.