UNIQUE कंस्ट्रेंट से डुप्लीकेट इन्सर्ट रोकें
किसी कॉलम या कॉलम समूह में डुप्लीकेट मान रोकने के लिए UNIQUE कंस्ट्रेंट जोड़ें। डुप्लीकेट इन्सर्ट प्रयास पर MySQL त्रुटि 1062 लौटाएगा।
टेबल बनाना
mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(100));
UNIQUE कंस्ट्रेंट जोड़ना
mysql> ALTER TABLE DemoTable ADD CONSTRAINT id_NameUnKey UNIQUE(Id, Name);
Query OK, 0 rows affected (0.82 sec)
डेटा डालना
mysql> INSERT INTO DemoTable VALUES(11, 'John'); -- सफल
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable VALUES(12, 'John'); -- सफल (अलग ID)
Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO DemoTable VALUES(11, 'John'); -- डुप्लीकेट - त्रुटि
ERROR 1062 (23000): Duplicate entry '11-John' for key 'id_NameUnKey'
परिणाम
mysql> SELECT * FROM DemoTable;
+------+------+
| Id | Name |
+------+------+
| 11 | John |
| 12 | John |
+------+------+
UNIQUE कंस्ट्रेंट प्रकार
-- एकल कॉलम
ALTER TABLE t ADD UNIQUE (email);
-- संयुक्त (कंपोजिट)
ALTER TABLE t ADD UNIQUE (user_id, product_id);
-- नामित कंस्ट्रेंट
ALTER TABLE t ADD CONSTRAINT uk_email UNIQUE (email);
-- निर्माण के समय
CREATE TABLE t (id INT, email VARCHAR(100), UNIQUE(email));
डुप्लीकेट हैंडलिंग विकल्प
-- डुप्लीकेट होने पर अनदेखा करें (INSERT IGNORE)
INSERT IGNORE INTO DemoTable VALUES(11, 'John');
-- डुप्लीकेट होने पर अपडेट करें (ON DUPLICATE KEY UPDATE)
INSERT INTO DemoTable VALUES(11, 'John')
ON DUPLICATE KEY UPDATE Name = 'John Updated';
-- REPLACE (पुरानी पंक्ति हटाकर नई डालता है)
REPLACE INTO DemoTable VALUES(11, 'John New');
सर्वोत्तम अभ्यास
- व्यावसायिक कुंजी (ईमेल, यूज़रनेम, SKU) पर हमेशा UNIQUE कंस्ट्रेंट रखें
- एप्लिकेशन लेवल पर भी डुप्लीकेट जांच करें (बेहतर UX के लिए)
- कंस्ट्रेंट नाम सार्थक रखें (जैसे
uk_users_email)