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

MySQL-এ কম্পাউন্ড ইউনিকনেস (Compound Uniqueness) এনফোর্স করা

MySQL-এ একাধিক কলাম মিলিয়ে ইউনিক কনস্ট্রেইন্ট (Composite Unique Constraint) লাগাতে UNIQUE KEY ব্যবহার করুন। এটি কালাম কম্বিনেশন ডুপ্লিকেট হওয়া রোধ করে।

সিনট্যাক্স

CREATE TABLE table_name (
    col1 TYPE,
    col2 TYPE,
    -- ...
    UNIQUE KEY constraint_name (col1, col2, ...)
);

উদাহরণ: স্টুডেন্ট নাম + মোবাইল নম্বর ইউনিক

CREATE TABLE enforce_compound_uniqueness (
    student_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    student_name VARCHAR(40) NOT NULL,
    student_mobile VARCHAR(12) NOT NULL,
    UNIQUE KEY uniq_name_mobile (student_name, student_mobile)
);

ডেটা ইনসার্ট টেস্ট

INSERT INTO enforce_compound_uniqueness (student_name, student_mobile) 
VALUES ('Larry', '2322245676');  -- OK

INSERT INTO enforce_compound_uniqueness (student_name, student_mobile) 
VALUES ('Larry', '2322245676');  -- ERROR! Duplicate

INSERT INTO enforce_compound_uniqueness (student_name, student_mobile) 
VALUES ('Sam', '6475746455');    -- OK (নাম ভিন্ন)

এরর মেসেজ

ERROR 1062 (23000): Duplicate entry 'Larry-2322245676' for key 'uniq_name_mobile'

ফলাফল

+-----------+-------------+------------------+
| student_id| student_name| student_mobile   |
+-----------+-------------+------------------+
| 1         | Larry       | 2322245676       |
| 3         | Sam         | 6475746455       |
+-----------+-------------+------------------+

ALERT TABLE দিয়ে পরে যোগ করা

ALTER TABLE existing_table 
ADD UNIQUE KEY uniq_name_email (name, email);

NULL মান হ্যান্ডলিং

MySQL-এ UNIQUE কি NULL মানকে আলাদা ধরে (একাধিক NULL আলো)। যদি NULL-কে یونিক করতে চান:

-- MySQL 8.0.13+: функционал ইনডেক্স
ALTER TABLE t ADD UNIQUE KEY uniq_name_email ((COALESCE(name, '')), (COALESCE(email, '')));

ইন্ডেক্স নাম দেখানো

SHOW INDEX FROM enforce_compound_uniqueness WHERE Non_unique = 0;

ব্যবহারিক কেস

  • ইমেইল + ডোমেইন ইউনিক (ব্যবহারকারী একই ইমেইল দিয়ে ডুপ্লিকেট একাউন্ট বানাতে পারবে না)
  • অর্ডার আইডি + প্রোডাক্ট আইডি (একই অর্ডারে একই প্রোডাক্ট دوبার নয়)
  • ইউজার আইডি + রোল (একই ইউজারের একই রোল دوبার নয়)
  1. MySQL-এ SUM() এবং IF() একসাথে ব্যবহার করা যায় কিনা?

  2. MySQL-এ AUTO_INCREMENT ডিফল্টভাবে সাইনড হতে পারে?

  3. MySQL-এ ORDER BY NULL ব্যবহার করা যায় কিনা?

  4. MySQL에서 ALTER TABLE로 컬럼 순서 변경하기