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;
ব্যবহারিক কেস
- ইমেইল + ডোমেইন ইউনিক (ব্যবহারকারী একই ইমেইল দিয়ে ডুপ্লিকেট একাউন্ট বানাতে পারবে না)
- অর্ডার আইডি + প্রোডাক্ট আইডি (একই অর্ডারে একই প্রোডাক্ট دوبার নয়)
- ইউজার আইডি + রোল (একই ইউজারের একই রোল دوبার নয়)