MySQL में ON DUPLICATE KEY UPDATE के साथ अपसर्ट
MySQL का ON DUPLICATE KEY UPDATE क्लॉज आपको एक रिकॉर्ड डालने की अनुमति देता है, लेकिन यदि एक अद्वितीय कुंजी संघर्ष होता है, तो मौजूदा रिकॉर्ड को अपडेट करता है। इसके लिए लक्ष्य कॉलम पर UNIQUE कंस्ट्रेंट की आवश्यकता होती है।
उदाहरण: नाम पर अद्वितीय कंस्ट्रेंट के साथ स्कोर अपसर्ट
mysql> CREATE TABLE DemoTable1459 (
-> Name VARCHAR(20),
-> Score INT
-> );
Query OK, 0 rows affected (0.72 sec)
-- अद्वितीय कंस्ट्रेंट जोड़ें (ON DUPLICATE KEY के लिए आवश्यक)
mysql> ALTER TABLE DemoTable1459 ADD CONSTRAINT Name_const UNIQUE (Name);
Query OK, 0 rows affected (1.09 sec)
ON DUPLICATE KEY UPDATE के साथ INSERT
mysql> INSERT INTO DemoTable1459 VALUES ('Chris', 57)
-> ON DUPLICATE KEY UPDATE Score = Score + 10;
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable1459 VALUES ('David', 89)
-> ON DUPLICATE KEY UPDATE Score = Score + 10;
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable1459 VALUES ('Chris', 78)
-> ON DUPLICATE KEY UPDATE Score = Score + 10;
Query OK, 2 rows affected (0.33 sec)
परिणाम
mysql> SELECT * FROM DemoTable1459; +-------+-------+ | Name | Score | +-------+-------+ | Chris | 67 | | David | 89 | +-------+-------+ 2 rows in set (0.00 sec)
व्याख्या
- पहला INSERT (Chris, 57): नई पंक्ति, स्कोर = 57
- दूसरा INSERT (David, 89): नई पंक्ति, स्कोर = 89
- तीसरा INSERT (Chris, 78): 'Chris' पर डुप्लिकेट कुंजी → UPDATE ट्रिगर → स्कोर = 57 + 10 = 67
नोट: VALUES क्लॉज में मान (78) उपेक्षित है; UPDATE अभिव्यक्ति Score = Score + 10 प्रबल होती है।
VALUES() फ़ंक्शन का उपयोग
INSERT मान को UPDATE में संदर्भित करने के लिए:
INSERT INTO DemoTable1459 VALUES ('Chris', 78)
ON DUPLICATE KEY UPDATE Score = VALUES(Score) + 10;
यह 78 + 10 = 88 सेट करेगा (मौजूदा 57 के बजाय)।
आवश्यकताएं
- टेबल में PRIMARY KEY या UNIQUE INDEX होना चाहिए
- डुप्लिकेट चेक कंस्ट्रेंट कॉलम पर आधारित है
Affected rows: 1 = नया इंसर्ट, 2 = अपडेट
REPLACE INTO विकल्प
REPLACE INTO DemoTable1459 VALUES ('Chris', 78);
- पुरानी पंक्ति हटाता है, नई डालता है
- सभी कॉलम नए मानों पर रीसेट (डिफ़ॉल्ट लागू)
- AUTO_INCREMENT बदल सकता है