MySQL में CASE WHEN THEN END से एक ही UPDATE क्वेरी में एकाधिक पंक्तियों को अलग-अलग मानों से अपडेट करना
सिंटैक्स:
UPDATE yourTableName
SET yourUpdateColumnName = CASE yourConditionColumnName
WHEN Value1 THEN 'UpdatedValue1'
WHEN Value2 THEN 'UpdatedValue2'
...
ELSE yourUpdateColumnName -- कोई बदलाव नहीं
END
WHERE yourConditionColumnName IN (Value1, Value2, ...);
व्यावहारिक उदाहरण
1. टेबल बनाएं:
mysql> CREATE TABLE UpdateAllDemo (
-> BookId INT,
-> BookName VARCHAR(200)
-> );
Query OK, 0 rows affected (1.18 sec)
2. डेटा डालें:
mysql> INSERT INTO UpdateAllDemo VALUES(1000,'Introduction to C');
mysql> INSERT INTO UpdateAllDemo VALUES(1001,'Introduction to Java');
3. मूल डेटा:
+--------+----------------------+
| BookId | BookName |
+--------+----------------------+
| 1000 | Introduction to C |
| 1001 | Introduction to Java |
+--------+----------------------+
2 rows in set (0.00 sec)
4. बल्क अपडेट (CASE के साथ):
mysql> UPDATE UpdateAllDemo
-> SET BookName = CASE BookId
-> WHEN 1000 THEN 'C in Depth'
-> WHEN 1001 THEN 'Java in Depth'
-> END
-> WHERE BookId IN (1000, 1001);
Query OK, 2 rows affected (0.24 sec)
5. अपडेट के बाद:
+--------+---------------+
| BookId | BookName |
+--------+---------------+
| 1000 | C in Depth |
| 1001 | Java in Depth |
+--------+---------------+
2 rows in set (0.00 sec)
क्यों यह कुशल है?
- एक क्वेरी में एकाधिक पंक्तियां अपडेट — नेटवर्क राउंड-ट्रिप बचाता है
- ट्रांजैक्शनली एटॉमिक — या तो सभी अपडेट होते हैं या कोई नहीं
- WHERE IN केवल प्रभावित पंक्तियों को लॉक करता है
वैकल्पिक: INSERT ... ON DUPLICATE KEY UPDATE (अपसर्ट)
INSERT INTO table (id, name) VALUES
(1000, 'C in Depth'), (1001, 'Java in Depth')
ON DUPLICATE KEY UPDATE name = VALUES(name);
बड़े बैच के लिए विचार:
- बहुत बड़े CASE (1000+ WHEN) पार्सिंग में धीमे हो सकते हैं
- बैच आकार 100-500 रखें
- तेज़ बल्क लोड के लिए
LOAD DATA INFILE या BATCH INSERT विचार करें
सावधानी:
ELSE क्लॉज शामिल करें ताकि गैर-मेल वाली पंक्तियां न बदलें (या WHERE से फ़िल्टर करें)
WHERE IN सूची CASE शर्तों से मेल खानी चाहिए
- प्राथमिक कुंजी या यूनिक इंडेक्स पर आधारित अपडेट सबसे तेज