كيف يمنع ORDER BY تعارض القيم الفريدة أثناء UPDATE؟

متقدمقراءة دقيقةآخر تحديث 2 أكتوبر 2026

SQL قواعد البيانات

الإجابة

عند تحديث عمود عليه قيد UNIQUE، قد يتعارض تغيير صف مع قيمة لا تزال موجودة في صف آخر. يمكن أن يحدث ذلك حتى لو كانت القيم النهائية المخطط لها مختلفة. مثلًا، زيادة القيمتين واحد واثنين بمقدار واحد تستهدف النتيجة اثنين وثلاثة، لكن تعديل الواحد أولًا يصطدم بالاثنين الموجود.

في تحديث جدول واحد، يسمح MySQL باستخدام ORDER BY لتحديد ترتيب تعديل الصفوف. عند زيادة سلسلة من القيم الفريدة الموجبة، يتيح البدء بالقيمة الأكبر إخلاء المجال للقيمة التالية. في المثال البسيط يتحول الاثنان إلى ثلاثة، ثم يصبح من الممكن تحويل الواحد إلى اثنين دون تعارض.

مثال

UPDATE planets
SET position_no = position_no + 1
ORDER BY position_no DESC;

هذه معالجة مرتبطة بطبيعة الحساب والبيانات، وليست قاعدة تجعل كل تحديث لقيم فريدة آمنًا. يجب فحص النتائج والحدود وأي قيم أخرى قد تتعارض مع التعديل المطلوب.

باختصار: ترتيب التحديث تنازليًا يمنع التعارض المؤقت في مثال زيادة القيم الفريدة المتتابعة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

أي أمر يزيد جميع قيم position_no بمقدار 1 دون تعارض UNIQUE في البيانات التالية؟

CREATE TABLE planets (
  id INT PRIMARY KEY,
  position_no INT NOT NULL UNIQUE
);
INSERT INTO planets VALUES (1, 1), (2, 2);