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

MySQL-এ ডিলিট হওয়া AUTO_INCREMENT আইডি পুনঃক্রমিকরণ (Re-sequence) করা

AUTO_INCREMENT কলামে সারি ডিলিট হলে গ্যাপ পড়ে (যেমন ১, ৩, ৫)। এই গ্যাপ বাদ দিয়ে সিকোয়েন্স ১, ২, ৩... করে ফেলতে ইউজার-ডিফাইনড ভেরিয়েবল সহ UPDATE ব্যবহার করা হয়।

টেবিল ও ডেটা তৈরি

mysql> CREATE TABLE DemoTable1955 (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

mysql> INSERT INTO DemoTable1955 VALUES (), (), (), (), (); -- ১,২,৩,৪,৫

কিছু সারি ডিলিট

mysql> DELETE FROM DemoTable1955 WHERE UserId IN (2, 4);

ডিলিটের পর (গ্যাপ আছে)

mysql> SELECT * FROM DemoTable1955;
+--------+
| UserId |
+--------+
|      1 |
|      3 |
|      5 |
+--------+

Re-sequence কোয়েরি: ১,২,৩ করা

mysql> UPDATE DemoTable1955
    SET UserId = (@increment_value := @increment_value + 1)
    ORDER BY UserId;

ব্যাখ্যা:

  • @increment_value — সেশন ভেরিয়েবল, ডিফল্ট NULL (০ হয়ে যায়)।
  • ORDER BY UserId — বর্তমান ক্রম অনুযারি আপডেট (সিকোয়েন্স মেইনটেইন করতে বাধ্যতামূলক)।
  • := — অ্যাসাইনমেন্ট অপারেটর (SET-এ = ও কাজ করতো, কিন্তু SELECT/UPDATE-এ := লাগে)।

আউটপুট: Query OK, 2 rows affected (0.00 sec)

ফলাফল যাচাই

mysql> SELECT * FROM DemoTable1955;
+--------+
| UserId |
+--------+
|      1 |
|      2 |
|      3 |
+--------+

⚠️ সতর্কতা এবং সীমাবদ্ধতা

  • প্রাইমারি কী আপডেট করা রিস্কি: ফরেন কী রেফারেন্স থাকলে ব্রেক হবে (ON UPDATE CASCADE না থাকলে)।
  • কানকারেন্সি: একই সময় অন্য ট্রানজ্যাকশন ইনসার্ট করলে ডুপ্লিকেট কী এরর হতে পারে।
  • AUTO_INCREMENT কাউন্টার: এটি MAX(UserId)+1 রিসেট করে না। পরবর্তী ইনসার্টে ৪ আশবে। রিসেট করতে: ALTER TABLE DemoTable1955 AUTO_INCREMENT = 4;
  • প্রোডাকশনে এড়িয়ে চলুন: সারোগেট কী (Surrogate key) কখনো রিনাম্বার করা উচিত নয়। বদলে নতুন সিকোয়েন্স কলাম যোগ করুন।

সুরক্ষিত বিকল্প: নতুন সিকোয়েন্স কলাম

ALTER TABLE DemoTable1955 ADD SeqNum INT;
SET @n := 0;
UPDATE DemoTable1955 SET SeqNum = (@n := @n + 1) ORDER BY UserId;
  1. MySQL-এ শেষ ১০টি সারি কীভাবে বের করবেন?

  2. MySQL-এ একটি টেবিলের মান দিয়ে অন্য টেবিলের ফিল্ড আপডেট করা (ভেরিয়েবল ব্যবহার করে)

  3. MySQL에서 데이터 삭제 후 AUTO_INCREMENT를 1부터 다시 시작하려면 TRUNCATE

  4. MySQL-এ GROUP_CONCAT ব্যবহার করে একাধিক রোকে এক ফিল্ডে জোড়া দেওয়া