MySQL में ON DUPLICATE KEY UPDATE क्लॉज का उपयोग करके एक ही क्वेरी में रिकॉर्ड डालने (INSERT) और अपडेट (UPDATE) दोनों कार्य किए जा सकते हैं। इसे "अपसर्ट" (UPSERT) भी कहा जाता है।
सिंटैक्स
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE KEY UPDATE column1 = new_value1, column2 = new_value2, ...;
व्यावहारिक उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL PRIMARY KEY,
Number INT
);
Query OK, 0 rows affected (0.83 sec)
2. रिकॉर्ड्स डालें और अपडेट करें
mysql> INSERT INTO DemoTable VALUES (1, 190) ON DUPLICATE KEY UPDATE Number = Number + 10; Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DemoTable VALUES (2, 130) ON DUPLICATE KEY UPDATE Number = Number + 10; Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DemoTable VALUES (1, 190) ON DUPLICATE KEY UPDATE Number = Number + 10; Query OK, 2 rows affected (0.14 sec) -- डुप्लिकेट मिला, अपडेट हुआ mysql> INSERT INTO DemoTable VALUES (2, 130) ON DUPLICATE KEY UPDATE Number = Number + 10; Query OK, 2 rows affected (0.17 sec) -- डुप्लिकेट मिला, अपडेट हुआ
3. परिणाम देखें
mysql> SELECT * FROM DemoTable; +----+--------+ | Id | Number | +----+--------+ | 1 | 200 | -- 190 + 10 = 200 | 2 | 140 | -- 130 + 10 = 140 +----+--------+ 2 rows in set (0.00 sec)
कैसे काम करता है
- पहली बार INSERT: नया रिकॉर्ड बनता है (1 row affected)
- डुप्लिकेट PRIMARY KEY/UNIQUE KEY मिलने पर: UPDATE 실행 होता है (2 rows affected)
VALUES()फ़ंक्शन का उपयोग करके डालने वाले मान को संदर्भित कर सकते हैं:UPDATE col = VALUES(col)
उपयोग के मामले
- काउंटर्स बढ़ाना/घटाना
- अंतिम अपडेट टाइमस्टैम्प बनाए रखना
- डुप्लिकेट डेटा रोकते हुए आंकड़े अपडेट करना