كيف أحذف أقدم عدد محدد من الصفوف في MySQL؟

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

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

الإجابة

يدعم أمر DELETE الخاص بجدول واحد في MySQL استخدام ORDER BY وLIMIT. يحدد الترتيب الصفوف التي تأتي أولًا، ثم يحدد الحد أقصى عدد يحذف منها. هذه الطريقة مفيدة لتنظيف البيانات على دفعات، بدل حذف جميع الصفوف المطابقة في عملية واحدة كبيرة.

إذا أردنا حذف أقدم مهمتين، نرتب حسب تاريخ الإنشاء تصاعديًا. وعندما تتساوى التواريخ، نضيف عمودًا فريدًا مثل المفتاح الأساسي حتى يكون الاختيار محددًا. كتابة LIMIT 2 وحدها لا تعني أن MySQL سيحذف أقدم صفين؛ فلا يوجد ترتيب زمني ضمني مضمون دون شرط ترتيب صريح.

مثال

DELETE FROM tasks
ORDER BY created_at ASC, id ASC
LIMIT 2;

يمكن إضافة WHERE قبل الترتيب لقصر التنظيف على المهام المنتهية مثلًا. عندئذ يرتب الأمر الصفوف المطابقة فقط ويختار منها الدفعة المطلوبة للحذف، مع بقاء بقية الصفوف دون تغيير.

باختصار: اجمع الترتيب الواضح مع LIMIT لحذف دفعة محددة يمكن توقع صفوفها.

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

اختبر فهمك

ما أرقام المهام التي تبقى وتظهر في الاستعلام الأخير؟

CREATE TABLE tasks (
  id INT PRIMARY KEY,
  created_at DATE NOT NULL
);
INSERT INTO tasks VALUES
  (1, '2026-01-02'),
  (2, '2026-01-01'),
  (3, '2026-01-01'),
  (4, '2026-01-03');
DELETE FROM tasks
ORDER BY created_at ASC, id ASC
LIMIT 2;
SELECT id FROM tasks ORDER BY id;