MySQL एक टेबल पर एकाधिक कॉलम को मिलाकर PRIMARY KEY (कंपोजिट/संयुक्त प्राइमरी की) बनाने की अनुमति देता है। इसका लाभ यह है कि उन कॉलम को एक इकाई के रूप में माना जाता है।
उदाहरण: कंपोजिट PRIMARY KEY बनाना
mysql> CREATE TABLE allotment(
RollNo INT,
Name VARCHAR(20),
RoomNo INT,
PRIMARY KEY(RollNo, RoomNo)
);
Query OK, 0 rows affected (0.23 sec)
mysql> DESCRIBE allotment;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| RollNo | int(11) | NO | PRI | 0 | |
| Name | varchar(20) | YES | | NULL | |
| RoomNo | int(11) | NO | PRI | 0 | |
+--------+-------------+------+-----+---------+-------+
कंपोजिट PK का व्यवहार
- दोनों कॉलम मिलकर एक अद्वितीय पहचान बनाते हैं
- व्यक्तिगत कॉलम में डुप्लिकेट हो सकते हैं, लेकिन संयोजन अद्वितीय होना चाहिए
- दोनों कॉलम
NOT NULLहो जाते हैं
डुप्लिकेट संयोजन पर एरर
mysql> INSERT INTO allotment VALUES
(1, 'Aarav', 201),
(2, 'Harshit', 201),
(1, 'Rahul', 201); -- RollNo=1, RoomNo=201 पहले से मौजूद है
ERROR 1062 (23000): Duplicate entry '1-201' for key 'PRIMARY'
मौजूदा टेबल पर कंपोजिट PK जोड़ना
ALTER TABLE table_name ADD PRIMARY KEY (col1, col2);
कंपोजिट PK हटाना
ALTER TABLE table_name DROP PRIMARY KEY;
उपयोग के मामले
- जंक्शन टेबल (Many-to-Many रिलेशनशिप)
- कंपोजिट पहचानकर्ता (जैसे: OrderID + LineItem)
- प्राकृतिक कुंजी जब कोई सिंगल कॉलम अद्वितीय नहीं
नोट: कंपोजिट PK वाले टेबल को रेफरेंस करने वाले FOREIGN KEY में भी समान कॉलम संख्या होनी चाहिए।