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

MySQL में त्रुटि ERROR 1062 (23000): Duplicate entry क्यों होती है और कैसे ठीक करें

मान लीजिए आपने कॉलम मानों को यूनिक कुंजी के रूप में सेट किया है और टेबल में डुप्लिकेट मान डालने का प्रयास करते हैं। इससे ERROR 1062 (23000): Duplicate entry होगी।

आइए पहले एक टेबल बनाते हैं:

mysql> create table DemoTable776 ( 
    FirstValue int, 
    SecondValue int, 
    unique key(FirstValue,SecondValue) ); 
Query OK, 0 rows affected (0.74 sec)

इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें। डुप्लिकेट मान डालने पर वही त्रुटि आती है:

mysql> insert into DemoTable776 values(10,20); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable776 values(10,40); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable776 values(40,20); 
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable776 values(10,20); 
ERROR 1062 (23000): Duplicate entry '10-20' for key 'FirstValue'

सेलेक्ट स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड प्रदर्शित करें:

mysql> select * from DemoTable776;

यह निम्नलिखित आउटपुट देगा:

+------------+-------------+
| FirstValue | SecondValue |
+------------+-------------+
| 10         | 20          |
| 10         | 40          |
| 40         | 20          |
+------------+-------------+
3 rows in set (0.00 sec)

त्रुटि क्यों होती है

  • UNIQUE KEY(FirstValue, SecondValue) दोनों कॉलम के संयोजन को अद्वितीय बनाता है
  • (10, 20) पहले से मौजूद है, इसलिए दूसरी बार डालने पर त्रुटि होती है
  • त्रुटि संदेश में '10-20' संयुक्त कुंजी मान दिखाता है

समाधान

  1. डुप्लिकेट रोकें: डालने से पहले जांचें SELECT COUNT(*) FROM DemoTable776 WHERE FirstValue=10 AND SecondValue=20
  2. INSERT IGNORE: INSERT IGNORE INTO DemoTable776 VALUES(10,20) - त्रुटि के बजाय चुपचाप छोड़ देता है
  3. ON DUPLICATE KEY UPDATE: INSERT INTO DemoTable776 VALUES(10,20) ON DUPLICATE KEY UPDATE SecondValue=20 - मौजूदा पंक्ति अपडेट करता है
  4. REPLACE INTO: मौजूदा पंक्ति को हटाकर नई डालता है
  1. - MySQL में UPDATE कमांड बैकटिक्स (`) का उपयोग क्यों करता है?

    उत्तर MySQL में: स्ट्रिंग मानों के लिए सिंगल कोट्स () उपयोग करें पहचानकर्ताओं (टेबल नाम, कॉलम नाम, एलियास) के लिए बैकटिक्स (`) उपयोग करें उदाहरण: टेबल बनाना ); Query OK, 0 rows affected (0.82 sec) नोट: key भी आरक्षित शब्द है, इसलिए बैकटिक्स आवश्यक हैं। डेटा डालना INSERT INTO DemoTable1552 VAL

  1. - MySQL में स्ट्रिंग और पूर्णांक तुलना त्रुटि क्यों नहीं उठाती

    MySQL में स्ट्रिंग और पूर्णांक की तुलना करने पर त्रुटि नहीं होती; MySQL स्ट्रिंग को स्वचालित रूप से संख्या में बदल देता है। यह अप्रत्याशित परिणाम दे सकता है। टेबल बनाएं mysql> CREATE TABLE DemoTable1852 ( Value1 VARCHAR(20), Value2 INT ); डेटा डालें mysql> INSERT INTO DemoTable1852 V

  1. - MySQL में INSERT ON DUPLICATE KEY UPDATE से एंट्री मौजूद होने पर अन्य कॉलम ओवरराइट करें

    INSERT ... ON DUPLICATE KEY UPDATE का उपयोग करके: यदि यूनिक/प्राइमरी की टकराव होता है तो नई पंक्ति डालने के बजाय मौजूदा पंक्ति अपडेट करें (अपसर्ट/upsert)। टेबल बनाएं (यूनिक की पर FirstName) mysql> CREATE TABLE DemoTable1891 ( FirstName VARCHAR(20), UNIQUE KEY(FirstName) ); डालें/अपडेट क