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

MySQL-এ LPAD() এবং COALESCE() দিয়ে প্রিসিডিং জিরো সহ আইডি জেনারেট করা

AUTO_INCREMENT ছাড়া নিজে থেকে প্যাডেড আইডি (যেমন 001, 002) জেনারেট করতে LPAD(), COALESCE() এবং MAX() ফাংশন কম্বাইন করে INSERT INTO SELECT ব্যবহার করা হয়।

টেবিল তৈরি

mysql> CREATE TABLE DemoTable1967 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserId VARCHAR(20)
);

INSERT INTO SELECT দিয়ে প্যাডেড আইডি ইনসার্ট

mysql> INSERT INTO DemoTable1967 (UserId)
    SELECT LPAD(COALESCE(MAX(Id), 0) + 1, 3, '0') FROM DemoTable1967;

mysql> INSERT INTO DemoTable1967 (UserId)
    SELECT LPAD(COALESCE(MAX(Id), 0) + 1, 3, '0') FROM DemoTable1967;

mysql> INSERT INTO DemoTable1967 (UserId)
    SELECT LPAD(COALESCE(MAX(Id), 0) + 1, 3, '0') FROM DemoTable1967;

ফাংশন ব্যাখ্যা:

  • MAX(Id) — বর্তমান সর্বোচ্চ আইডি।
  • COALESCE(MAX(Id), 0) — টেবিল খালি থাকলে ০ রিটার্ন (NULL এড়াতে)।
  • + 1 — পরবর্তী সিকোয়েন্স নম্বর।
  • LPAD(..., 3, '0') — ৩ অঙ্কে বামে ০ প্যাড করে (১ → '001')।

ফলাফল যাচাই

mysql> SELECT * FROM DemoTable1967;
+----+--------+
| Id | UserId |
+----+--------+
|  1 | 001    |
|  2 | 002    |
|  3 | 003    |
+----+--------+

সতর্কতা: কানকারেন্সি সমস্যা

এই পদ্ধতি **নন-অ্যাটমিক**। একই সময় دوজন ইউজার ইনসার্ট করলে ডুপ্লিকেট UserId তৈরি হতে পারে (রেস কন্ডিশন)।

সুরক্ষিত বিকল্পসমূহ

  1. AUTO_INCREMENT + ZEROFILL (আর্টিকেল ১০০৬০৭৫৪৯৯ দেখুন) — নেটিভ, থ্রেড-সেফ।
  2. সিকোয়েন্স টেবিল + ট্রানজ্যাকশন:
    START TRANSACTION;
        UPDATE seq_table SET val = LAST_INSERT_ID(val + 1);
        INSERT INTO main_table (id, ...) VALUES (LAST_INSERT_ID(), ...);
        COMMIT;
  3. UUID() / ULID() — ডিস্ট্রিবিউটেড সিস্টেমের জন্য।

পারফরম্যান্স নোট

MAX(Id) প্রতিবার ফুল টেবিল স্ক্যান করতে পারে (ইন্ডেক্স থাকলে দ্রুত)। বড় টেবিলে ডেডিকেটেড সিকোয়েন্স টেবিল ভালো।

  1. Java ব্যবহার করে MySQL টেবিলে রেকর্ড সন্নিবেশ করা

  2. MySQL에서 한 테이블의 데이터를 다른 테이블로 복사하기 (INSERT INTO SELECT)

  3. MySQL-এ AUTO_INCREMENT টেবিলে INSERT INTO SELECT ব্যবহার করা

  4. MySQL-এ INSERT INTO SELECT এবং UNION দিয়ে একাধিক রো ইনসার্ট করা