شبكة تعلم مع ناو

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

عند التراجع عن معاملة في 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 من الأساسيات للاحتراف.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.