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

MySQL में INSERT ... ON DUPLICATE KEY UPDATE का सही सिंटैक्स

MySQL में ON DUPLICATE KEY UPDATE का सही उपयोग

INSERT ... ON DUPLICATE KEY UPDATE MySQL का एक शक्तिशाली एक्सटेंशन है जो डुप्लिकेट कुंजी संघर्ष होने पर मौजूदा पंक्ति को अपडेट करने की अनुमति देता है। इसे "अपसर्ट" (UPSERT - UPDATE + INSERT) भी कहा जाता है।

सिंटैक्स

INSERT INTO yourTableName VALUES (yourValue1, yourValue2, ...)
ON DUPLICATE KEY UPDATE 
    yourColumnName1 = yourValue1,
    yourColumnName2 = yourValue2, ...;

टेबल बनाना (UNIQUE KEY के साथ)

mysql> CREATE TABLE DemoTable1539 (
    -> EmployeeName VARCHAR(20),
    -> EmployeeSalary INT,
    -> UNIQUE KEY(EmployeeName)
    -> );
Query OK, 0 rows affected (0.62 sec)

महत्वपूर्ण: UNIQUE KEY या PRIMARY KEY आवश्यक है

ON DUPLICATE KEY UPDATE काम करने के लिए, टेबल में एक PRIMARY KEY या UNIQUE INDEX होना चाहिए जो डुप्लिकेट का पता लगा सके।

डेटा डालना और अपडेट करना

-- पहली बार डालना - नई पंक्ति बनती है
mysql> INSERT INTO DemoTable1539 VALUES ('Chris',4500) 
    -> ON DUPLICATE KEY UPDATE EmployeeName='Robert', EmployeeSalary=8500;
Query OK, 1 row affected (0.20 sec)

-- दूसरी पंक्ति डालना - नई पंक्ति बनती है
mysql> INSERT INTO DemoTable1539 VALUES ('David',5500) 
    -> ON DUPLICATE KEY UPDATE EmployeeName='Robert', EmployeeSalary=8500;
Query OK, 1 row affected (0.10 sec)

-- डुप्लिकेट कुंजी डालना - मौजूदा पंक्ति अपडेट होती है
mysql> INSERT INTO DemoTable1539 VALUES ('Chris',4500) 
    -> ON DUPLICATE KEY UPDATE EmployeeName='Robert', EmployeeSalary=8500;
Query OK, 2 rows affected (0.14 sec)

नोट: "2 rows affected" का अर्थ

  • 1 row affected = नई पंक्ति डाली गई
  • 2 rows affected = मौजूदा पंक्ति अपडेट की गई

अंतिम परिणाम

mysql> SELECT * FROM DemoTable1539;
+--------------+----------------+
| EmployeeName | EmployeeSalary |
+--------------+----------------+
| Robert       |           8500 |
| David        |           5500 |
+--------------+----------------+
2 rows in set (0.00 sec)

व्याख्या

  1. पहला INSERT: 'Chris' नया है → डाला गया (1 row affected)
  2. दूसरा INSERT: 'David' नया है → डाला गया (1 row affected)
  3. तीसरा INSERT: 'Chris' पहले से मौजूद है → अपडेट किया गया: नाम 'Robert' और वेतन 8500 में बदला (2 rows affected)

VALUES() फ़ंक्शन का उपयोग (बेहतर तरीका)

INSERT INTO DemoTable1539 (EmployeeName, EmployeeSalary) 
VALUES ('Chris', 4500)
ON DUPLICATE KEY UPDATE 
    EmployeeSalary = VALUES(EmployeeSalary);  -- डाले गए मान का उपयोग करता है

व्यावहारिक उपयोग मामले

  • काउंटर बढ़ाना: UPDATE count = count + 1
  • अंतिम अद्यतन समयस्टैम्प सेट करना: UPDATE last_modified = NOW()
  • शर्तों के आधार पर आंशिक अपडेट

सावधानियां

  1. एकाधिक UNIQUE KEYS होने पर व्यवहार जटिल हो सकता है
  2. AUTO_INCREMENT मान अपडेट पर भी बढ़ सकता है
  3. ट्रिगर दोनों INSERT और UPDATE के लिए फायर होते हैं
  1. - MySQL में INSERT...ON DUPLICATE KEY UPDATE लागू करना

    परिचय जब आप किसी टेबल में नई पंक्ति डालते हैं और वह पंक्ति UNIQUE इंडेक्स या PRIMARY KEY में डुप्लिकेट का कारण बनती है, तो MySQL त्रुटि देता है। इस समस्या को हल करने के लिए ON DUPLICATE KEY UPDATE क्लॉज का उपयोग किया जाता है। इससे मौजूदा पंक्ति नए मानों से अपडेट हो जाती है। उदाहरण: टेबल और यूनिक इं

  1. - MySQL में डुप्लिकेट रिकॉर्ड बदलने के लिए INSERT ON DUPLICATE KEY UPDATE का उपयोग

    MySQL में डुप्लिकेट रिकॉर्ड को संभालने का सबसे कुशल तरीका INSERT ... ON DUPLICATE KEY UPDATE स्टेटमेंट है। यह डुप्लिकेट की त्रुटि से बचाता है और मौजूदा रिकॉर्ड को अपडेट करता है। सिंटैक्स INSERT INTO टेबल_नाम (कॉलम1, कॉलम2, ...) VALUES (मान1, मान2, ...) ON DUPLICATE KEY UPDATE कॉलम1 = नया_मान1,

  1. - MySQL में प्राइमरी की कैसे रीसेट करें?

    MySQL में ऑटो-इन्क्रीमेंट प्राइमरी की को रीसेट (1 से शुरू) करने के लिए, TRUNCATE TABLE का उपयोग करें जो डेटा हटाता है और ऑटो-इन्क्रीमेंट काउंटर रीसेट करता है, या ALTER TABLE से मैन्युअली सेट करें। विधि 1: TRUNCATE TABLE (सबसे सरल, डेटा हटाता है) टेबल बनाएं: mysql> CREATE TABLE DemoTable1929 (