هل يمكن التراجع عن TRUNCATE باستخدام ROLLBACK في MySQL؟

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

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

الإجابة

لا يمكن التعامل مع TRUNCATE TABLE في MySQL مثل حذف عادي قابل للتراجع داخل معاملة. فهذا الأمر من أوامر تعريف البيانات ويسبب اعتمادًا ضمنيًا للمعاملة. لذلك لا تعيد كتابة ROLLBACK بعده الصفوف التي أزالها، حتى إذا سبقه أمر START TRANSACTION وكان الجدول يستخدم InnoDB.

يظهر هذا الفرق عند تجربة تنظيف البيانات قبل اتخاذ قرار نهائي. استخدام DELETE داخل معاملة غير معتمدة يمكن أن يسمح بالتراجع، أما استبداله بـ TRUNCATE فيغير سلوك المعاملة. كما قد يؤثر الاعتماد الضمني في تغييرات سابقة كانت معلقة، فلا تقتصر أهمية الأمر على تفريغ الجدول نفسه.

مثال

START TRANSACTION;
TRUNCATE TABLE events;
ROLLBACK;

بعد نجاح التفريغ يظل الجدول فارغًا في هذا المثال. وجود كلمة معاملة في بداية الملف لا يجعل جميع الأوامر اللاحقة قابلة للإلغاء، ولذلك يجب معرفة سلوك كل أمر يستخدم داخله.

باختصار: لا يستعيد ROLLBACK بيانات أزالها TRUNCATE TABLE في MySQL.

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

اختبر فهمك

ما نتيجة COUNT(*) بعد تنفيذ الكود كاملًا؟

CREATE TABLE events (
  id INT PRIMARY KEY
) ENGINE = InnoDB;
INSERT INTO events VALUES (1), (2);
START TRANSACTION;
TRUNCATE TABLE events;
ROLLBACK;
SELECT COUNT(*) FROM events;