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

MySQL में UNIQUE कंस्ट्रेंट पर बहु-पंक्ति INSERT में डुप्लिकेट होने पर कुछ भी नहीं डलता

MySQL में एकल INSERT स्टेटमेंट में एकाधिक पंक्तियां डालते समय, यदि कोई पंक्ति UNIQUE कंस्ट्रेंट का उल्लंघन करती है, तो पूरा स्टेटमेंट विफल होता है और कोई पंक्ति नहीं डलती (डिफ़ॉल्ट व्यवहार)।

उदाहरण

1. यूनिक कंस्ट्रेंट के साथ टेबल

mysql> CREATE TABLE DemoTable1585 (
    -> StudentId INT,
    -> StudentMarks INT,
    -> UNIQUE(StudentId)
    -> );

2. बहु-पंक्ति INSERT (चौथी पंक्ति डुप्लिकेट)

mysql> INSERT INTO DemoTable1585 VALUES(1, 87), (2, 98), (3, 91), (3, 48);
ERROR 1062 (23000): Duplicate entry '3' for key 'StudentId'

3. परिणाम: टेबल खाली

mysql> SELECT * FROM DemoTable1585;
Empty set (0.00 sec)

क्यों?

MySQL डिफ़ॉल्ट रूप से INSERT को एटॉमिक ऑपरेशन के रूप में मानता है: या तो सभी पंक्तियां सफलतापूर्वक डलती हैं, या कोई नहीं (रोलबैक)।

विकल्प: आंशिक सम्मिलन

1. INSERT IGNORE (डुप्लिकेट छोड़ें)

mysql> INSERT IGNORE INTO DemoTable1585 VALUES(1, 87), (2, 98), (3, 91), (3, 48);
Query OK, 3 rows affected, 1 warning
-- पहले 3 डले, चौथा नजरअंदाज

2. ON DUPLICATE KEY UPDATE (अपडेट करें)

mysql> INSERT INTO DemoTable1585 VALUES(1, 87), (2, 98), (3, 91), (3, 48)
    -> ON DUPLICATE KEY UPDATE StudentMarks = VALUES(StudentMarks);
-- चौथी पंक्ति से StudentId=3 का StudentMarks 48 हो जाएगा

3. REPLACE INTO (हटाकर डालें)

mysql> REPLACE INTO DemoTable1585 VALUES(1, 87), (2, 98), (3, 91), (3, 48);
-- मौजूदा StudentId=3 हटाकर नई पंक्ति डालेगा

तुलना

स्टेटमेंटडुप्लिकेट पर व्यवहारचेतावनी
INSERTपूरा विफल, रोलबैकत्रुटि
INSERT IGNOREडुप्लिकेट छोड़ें, बाकी डालेंचेतावनी
INSERT ... ON DUPLICATE KEY UPDATEमौजूदा अपडेट करेंकोई नहीं
REPLACE INTOपुराना हटाएं, नया डालेंकोई नहीं (लेकिन ऑटो-इन्क्रीमेंट बदल सकता है)

सिफारिश

एप्लिकेशन आवश्यकता के अनुसार चुनें: INSERT IGNORE (लॉगिंग), ON DUPLICATE KEY UPDATE (अपसर्ट), REPLACE (पूर्ण प्रतिस्थापन)।

  1. - MySQL में LPAD और INSERT INTO SELECT का उपयोग करके अग्रणी शून्य के साथ मान डालें

    MySQL में अग्रणी शून्य के साथ क्रमिक ID उत्पन्न करना LPAD() फ़ंक्शन और INSERT INTO SELECT का उपयोग करके आप एक कॉलम में अग्रणी शून्य के साथ स्वरूपित मान (जैसे 001, 002, 003) स्वचालित रूप से उत्पन्न और डाल सकते हैं। टेबल बनाना ); Query OK, 0 rows affected (0.00 sec) LPAD के साथ INSERT INTO SELECT क

  1. मेटावर्स क्या है और इसका फेसबुक से क्या लेना-देना है मेटावर्स क्या है और इसका फेसबुक से क्या लेना-देना है

    मार्क जुकरबर्ग नाटकीय और रहस्यमयी होना पसंद करते हैं, जिससे फेसबुक का अचानक मेटा में रीब्रांडिंग कम आश्चर्यजनक लगता है। हालांकि, यह ज्यादातर लोगों के लिए किसी चीज से अधिक भ्रमित करने वाला है। मेटावर्स क्या है और यह वास्तव में फेसबुक से कैसे संबंधित है? दोनों आपकी सोच से अधिक जुड़े हुए हैं, लेकिन पहल

  1. डुप्लिकेट मानों के साथ भी एक्सेल संबंध बनाएं: चरण-दर-चरण गाइड डुप्लिकेट मानों के साथ भी एक्सेल संबंध बनाएं: चरण-दर-चरण गाइड

    कई मौकों पर, हमें एक्सेल में संबंध बनाने की आवश्यकता हो सकती है डुप्लिकेट मानों के साथ क्योंकि डेटासेट में एक सामान्य कॉलम होता है जिसका उपयोग किया जा सकता है। लेकिन अगर किसी तरह दोनों टेबल में डुप्लिकेट मान हैं, तो प्रक्रिया को निष्पादित करना काफी मुश्किल हो जाता है। यदि आप यह जानने के लिए उत्सुक ह