MySQL-এ ভবিষ্যতে ব্যবহার করার জন্য কিছু AUTO_INCREMENT ID "রিজার্ভ" বা বুক করে রাখতে চাইলে, ট্রানজ্যাকশন শুরু করে সারি ইনসার্ট করে ROLLBACK করুন। এর ফলে অটো-ইনক্রিমেন্ট কাউন্টার বাড়ে যাবে, কিন্তু ডেটা সংরক্ষিত হবে না।
সিনট্যাক্স
START TRANSACTION;
INSERT INTO table_name VALUES (), (), (), (); -- N সারি
ROLLBACK;
SELECT LAST_INSERT_ID() INTO @reserved_id;
উদাহরণ
CREATE TABLE reserve_auto_inc_demo (
user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
START TRANSACTION;
INSERT INTO reserve_auto_inc_demo VALUES (), (), (), (); -- ৪ সারি
SELECT * FROM reserve_auto_inc_demo; -- ID: 1,2,3,4 দেখাবে
ROLLBACK; -- ডেটা মুছে যাবে, কিন্তু অটো-ইনক্রিমেন্ট কাউন্টার ৫-এ থাকবে
SELECT LAST_INSERT_ID() INTO @incremented_value;
SELECT @incremented_value;
ফলাফল
+-------------------+
| @incremented_value|
+-------------------+
| 1 |
+-------------------+
ব্যাখ্যা: LAST_INSERT_ID() প্রথম ইনসার্ট করা ID (১) রিটার্ন করে। পরবর্তী ইনসার্টের জন্য AUTO_INCREMENT মান হবে ৫। অর্থাৎ ID ১-৪ "রিজার্ভড" হয়ে গেল।
ব্যবহারিক কেস: ব্যাচ আপলোডের আগে ID ব্লক রিজার্ভ
-- ১০০০টি ID রিজার্ভ করুন
START TRANSACTION;
INSERT INTO big_table ()
SELECT NULL FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 ...) AS t -- ১০০০ সারি
LIMIT 1000;
ROLLBACK;
-- এখন অটো-ইনক্রিমেন্ট ১০০১-এ আছে
-- এক্সটার্নাল সিস্টেমে এই ID রেঞ্জ (১-১০০০) ব্যবহার করুন
সতর্কতা
- রোলব্যাক করার পরও
AUTO_INCREMENTমান কমে না (গ্যাপ থাকে) - InnoDB-এ এটি স্বাভাবিক আচরণ
- কনকারেন্টি হ্যান্ডলিং: একাধিক সেশন একসাথে করলে ID ওভারল্যাপ হতে পারে
বিকল্প: AUTO_INCREMENT মান সরাসরি সেট করুন
ALTER TABLE table_name AUTO_INCREMENT = 1001;
এটি আরও সরল এবং নিয়ন্ত্রণযোগ্য।