هل يعيد ROLLBACK عداد AUTO_INCREMENT إلى قيمته السابقة؟

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

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

الإجابة

عند التراجع عن معاملة في InnoDB، تُلغى تغييرات البيانات الخاصة بها، لكن الأرقام التي خُصصت من AUTO_INCREMENT لا تعود بالضرورة إلى التسلسل لتُستخدم من جديد. في MySQL 8، الرقم الذي وُلّد لإدخال تم التراجع عنه يترك فجوة، حتى إن لم يبق أي صف يحمل ذلك الرقم.

هذا يوضح الفرق بين التراجع عن الصف وتراجع مولّد المعرّفات. إذا أخذ إدخال أول الرقم 1 ثم نفذنا ROLLBACK، يأخذ الإدخال التلقائي التالي الرقم 2 في المثال البسيط، مع الإعدادات الافتراضية ودون عمليات أخرى. عدم وجود الصف 1 لا يدل وحده على أن مستخدمًا حذفه بعد حفظه.

مثال

CREATE TABLE tasks (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(30) NOT NULL
) ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO tasks (title) VALUES ('A');
ROLLBACK;
INSERT INTO tasks (title) VALUES ('B');

لهذا لا يصلح الاعتماد على اتصال هذه الأرقام لإثبات عدد العمليات الناجحة أو ترتيب مستندات يتطلب ترقيمها قاعدة خاصة بلا فجوات.

باختصار: يعيد ROLLBACK البيانات، لكنه لا يسترد الرقم المولّد في هذا التسلسل؛ فتظهر فجوة طبيعية في المعرّفات.

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

اختبر فهمك

ما الصف الذي يعيده الاستعلام النهائي بالإعدادات الافتراضية ودون عمليات أخرى؟

CREATE TABLE tasks (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(30) NOT NULL
) ENGINE=InnoDB;
START TRANSACTION;
INSERT INTO tasks (title) VALUES ('A');
ROLLBACK;
INSERT INTO tasks (title) VALUES ('B');
SELECT id, title FROM tasks;