आइए पहले एक टेबल बनाते हैं:
mysql> create table DemoTable (
FirstName varchar(100) );
Query OK, 0 rows affected (0.58 sec)
आधिकारिक MySQL डॉक्स के अनुसार, "IGNORE के बिना, एक पंक्ति जो टेबल में मौजूदा UNIQUE इंडेक्स या PRIMARY KEY मान को डुप्लिकेट करती है, डुप्लिकेट-कुंजी त्रुटि का कारण बनती है और स्टेटमेंट रद्द हो जाता है।"
इसलिए, आइए अब एक यूनिक इंडेक्स जोड़ें:
mysql> alter table DemoTable add unique index(FirstName); Query OK, 0 rows affected (0.50 sec) Records: 0 Duplicates: 0 Warnings: 0
इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें। जैसा कि आप देख सकते हैं, चूंकि हमने INSERT IGNORE का उपयोग नहीं किया है, डुप्लिकेट रिकॉर्ड डालते समय त्रुटि दिखाई देगी:
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Robert');
ERROR 1062 (23000): Duplicate entry 'Robert' for key 'FirstName'
mysql> insert into DemoTable values('Chris');
ERROR 1062 (23000): Duplicate entry 'Chris' for key 'FirstName'
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.12 sec)
सेलेक्ट स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड प्रदर्शित करें:
mysql> select * from DemoTable;
यह निम्नलिखिक आउटपुट देगा:
+-----------+ | FirstName | +-----------+ | Chris | | David | | Robert | | Sam | +-----------+ 4 rows in set (0.00 sec)
व्याख्या
UNIQUE INDEXकॉलम पर डुप्लिकेट मानों को रोकता है- डिफ़ॉल्ट रूप से (बिना IGNORE), डुप्लिकेट INSERT त्रुटि 1062 फेंकता है और रुक जाता है
INSERT IGNOREत्रुटि को चेतावनी में बदल देता है और जारी रखता है- यहां IGNORE नहीं उपयोग किया गया, इसलिए त्रुटि दिखाई दी और डुप्लिकेट नहीं डाले गए
INSERT IGNORE के साथ व्यवहार
INSERT IGNORE INTO DemoTable VALUES ('Robert'), ('Chris'), ('Sam');
कोई त्रुटि नहीं, केवल चेतावनी। डुप्लिकेट छोड़ दिए जाते हैं, नए (Sam) डाले जाते हैं।
ON DUPLICATE KEY UPDATE विकल्प
INSERT INTO DemoTable VALUES ('Robert') ON DUPLICATE KEY UPDATE FirstName='Robert';
मौजूदा पंक्ति अपडेट करता है (यहां कोई बदलाव नहीं)।