परिचय
जब आप किसी टेबल में नई पंक्ति डालते हैं और वह पंक्ति UNIQUE इंडेक्स या PRIMARY KEY में डुप्लिकेट का कारण बनती है, तो MySQL त्रुटि देता है। इस समस्या को हल करने के लिए ON DUPLICATE KEY UPDATE क्लॉज का उपयोग किया जाता है। इससे मौजूदा पंक्ति नए मानों से अपडेट हो जाती है।
उदाहरण: टेबल और यूनिक इंडेक्स बनाना
mysql> CREATE TABLE DemoTable (
-> Value INT
-> );
Query OK, 0 rows affected (0.61 sec)
mysql> CREATE UNIQUE INDEX value_index ON DemoTable(Value);
Query OK, 0 rows affected (0.77 sec)
Records: 0 Duplicates: 0 Warnings: 0
ON DUPLICATE KEY UPDATE के साथ डेटा डालना
mysql> INSERT INTO DemoTable VALUES(40) ON DUPLICATE KEY UPDATE Value = Value + 1000;
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES(50) ON DUPLICATE KEY UPDATE Value = Value + 1000;
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES(40) ON DUPLICATE KEY UPDATE Value = Value + 1000;
Query OK, 2 rows affected (0.15 sec)
व्याख्या:
- पहली दो क्वेरीज नए मान 40 और 50 डालती हैं
- तीसरी क्वेरी 40 को फिर से डालने का प्रयास करती है, लेकिन चूंकि 40 पहले से मौजूद है (यूनिक इंडेक्स के कारण), यह मौजूदा मान को 40 + 1000 = 1040 में अपडेट कर देती है
2 rows affectedका अर्थ है: 1 पंक्ति डाली गई होती, लेकिन 1 पंक्ति अपडेट हुई
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-------+
| Value |
+-------+
| 50 |
| 1040 |
+-------+
2 rows in set (0.00 sec)
उपयोग के मामले
- काउंटर बढ़ाने के लिए
- अपसर्ट (UPSERT) ऑपरेशन के लिए
- डुप्लिकेट कुंजी त्रुटियों से बचने के लिए
ON DUPLICATE KEY UPDATE MySQL का एक शक्तिशाली फीचर है जो डेटा अखंडता बनाए रखते हुए डुप्लिकेट हैंडलिंग को सरल बनाता है।