বিদ্যমান টেবিলে একাধিক কলাম মিলিয়ে কম্পোজিট UNIQUE KEY যোগ করতে ALTER TABLE ... ADD UNIQUE ব্যবহার করুন।
সিনট্যাক্স
ALTER TABLE table_name
ADD UNIQUE KEY constraint_name (col1, col2, ...);
উদাহরণ
CREATE TABLE make_composite_key_demo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(40),
student_age INT,
student_grade CHAR(1)
);
বর্তমান কাঠামো (ইউনিক কি নেই)
DESC make_composite_key_demo;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| student_name | varchar(40) | YES | | NULL | |
| student_age | int(11) | YES | | NULL | |
| student_grade| char(1) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
কম্পোজিট ইউনিক কি যোগ করা
ALTER TABLE make_composite_key_demo
ADD UNIQUE KEY uniq_name_age_grade (student_name, student_age, student_grade);
পরিবর্তন পর কাঠামো
DESC make_composite_key_demo;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| student_name | varchar(40) | YES | MUL | NULL | |
| student_age | int(11) | YES | | NULL | |
| student_grade| char(1) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
Key কলামে MUL বোঝায় এই কলাম কম্পোজিট ইনডেক্সের অংশ।
ডুপ্লিকেট টেস্ট
INSERT INTO make_composite_key_demo (student_name, student_age, student_grade)
VALUES ('Alice', 20, 'A'); -- OK
INSERT INTO make_composite_key_demo (student_name, student_age, student_grade)
VALUES ('Alice', 20, 'A'); -- ERROR 1062: Duplicate entry 'Alice-20-A'
ইন্ডেক্স অর্ডারের গুরুত্ব
(student_name, student_age, student_grade) অর্ডার:
- সাবশ:
WHERE student_name = ? AND student_age = ? AND student_grade = ?— কাজ করে - সাবশ:
WHERE student_name = ?— কাজ করে (লিফটমোস্ট প্রিফিক্স) - সাবশ:
WHERE student_age = ?— ইনডেক্স ব্যবহার করে না
ইউনিক কি সরানো
ALTER TABLE make_composite_key_demo DROP INDEX uniq_name_age_grade;
নামিং কনভেনশন
uniq____
-- উদাহরণ: uniq_student_name_age_grade