Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में CASE स्टेटमेंट से एक क्वेरी में बल्क अपडेट (Bulk Update)

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 शर्तों से मेल खानी चाहिए
  • प्राथमिक कुंजी या यूनिक इंडेक्स पर आधारित अपडेट सबसे तेज
  1. - क्या MySQL में UPDATE क्वेरी के साथ LIMIT उपयोग कर सकते हैं?

    हाँ, MySQL में UPDATE के साथ LIMIT उपयोग कर सकते हैं, लेकिन सीधे नहीं - सबक्वेरी की आवश्यकता होती है। सीधा LIMIT (काम नहीं करता) -- यह सिंटैक्स त्रुटि देगा UPDATE tblUpdateLimit SET name = Adam LIMIT 7; काम करने वाला तरीका: सबक्वेरी के साथ UPDATE tblUpdateLimit SET name = Adam WHERE id IN (

  1. Java से MySQL डेटाबेस में डेटा कैसे अपडेट करें? Java से MySQL डेटाबेस में डेटा कैसे अपडेट करें?

    JDBC का उपयोग करके MySQL में रिकॉर्ड अपडेट करें Java से MySQL डेटाबेस में डेटा अपडेट करने के लिए, आप JDBC (Java Database Connectivity) API के साथ SQL UPDATE कथन का उपयोग करते हैं। SQL सिंटैक्स UPDATE टेबल_नाम SET कॉलम1 = मान1, कॉलम2 = मान2, ... WHERE शर्त; पूर्ण Java उदाहरण 1. डेटाबेस तैयारी IN

  1. Java से MySQL डेटाबेस में डेटा कैसे डिलीट करें? Java से MySQL डेटाबेस में डेटा कैसे डिलीट करें?

    JDBC का उपयोग करके MySQL से रिकॉर्ड डिलीट करें Java से MySQL में डेटा डिलीट करने के लिए, आप JDBC के साथ SQL DELETE कथन का उपयोग करते हैं। SQL सिंटैक्स DELETE FROM टेबल_नाम WHERE शर्त; पूर्ण Java उदाहरण 1. डेटाबेस तैयारी INSERT INTO DeleteTableDemo VALUES(101, Smith), (102, Johnson); 2. Java को