কম্পিউটার টিউটোরিয়াল

MySQL-এ AUTO_INCREMENT ID রিজার্ভ/রিজার্ভড রাখা (ট্রানজ্যাকশন রোলব্যাক দিয়ে)

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;

এটি আরও সরল এবং নিয়ন্ত্রণযোগ্য।

  1. MySQL-এ ডুপ্লিকেট আইডির গড় বের করে সর্বোচ্চ গড়見せ वाले আইডি খুঁজে বের করা (HAVING AVG)

  2. MySQL-এ পাস করা ID-দের কাস্টম অর্ডার বজায় রাখা

  3. MySQL에서 FIND_IN_SET으로 콤마 구분 문자열 파라미터에 다중 값 매칭하기

  4. MySQL-এ ডুপ্লিকেট আইডির জন্য সর্বোচ্চ পরিমাণ (MAX) বের করা