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

MySQL में डबल इन्सर्ट (डुप्लीकेट एंट्री) कैसे रोकें?

UNIQUE कंस्ट्रेंट से डुप्लीकेट इन्सर्ट रोकें

किसी कॉलम या कॉलम समूह में डुप्लीकेट मान रोकने के लिए UNIQUE कंस्ट्रेंट जोड़ें। डुप्लीकेट इन्सर्ट प्रयास पर MySQL त्रुटि 1062 लौटाएगा।

टेबल बनाना

mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(100));

UNIQUE कंस्ट्रेंट जोड़ना

mysql> ALTER TABLE DemoTable ADD CONSTRAINT id_NameUnKey UNIQUE(Id, Name);
Query OK, 0 rows affected (0.82 sec)

डेटा डालना

mysql> INSERT INTO DemoTable VALUES(11, 'John');  -- सफल
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO DemoTable VALUES(12, 'John');  -- सफल (अलग ID)
Query OK, 1 row affected (0.21 sec)

mysql> INSERT INTO DemoTable VALUES(11, 'John');  -- डुप्लीकेट - त्रुटि
ERROR 1062 (23000): Duplicate entry '11-John' for key 'id_NameUnKey'

परिणाम

mysql> SELECT * FROM DemoTable;

+------+------+
| Id   | Name |
+------+------+
| 11   | John |
| 12   | John |
+------+------+

UNIQUE कंस्ट्रेंट प्रकार

-- एकल कॉलम
ALTER TABLE t ADD UNIQUE (email);

-- संयुक्त (कंपोजिट)
ALTER TABLE t ADD UNIQUE (user_id, product_id);

-- नामित कंस्ट्रेंट
ALTER TABLE t ADD CONSTRAINT uk_email UNIQUE (email);

-- निर्माण के समय
CREATE TABLE t (id INT, email VARCHAR(100), UNIQUE(email));

डुप्लीकेट हैंडलिंग विकल्प

-- डुप्लीकेट होने पर अनदेखा करें (INSERT IGNORE)
INSERT IGNORE INTO DemoTable VALUES(11, 'John');

-- डुप्लीकेट होने पर अपडेट करें (ON DUPLICATE KEY UPDATE)
INSERT INTO DemoTable VALUES(11, 'John') 
ON DUPLICATE KEY UPDATE Name = 'John Updated';

-- REPLACE (पुरानी पंक्ति हटाकर नई डालता है)
REPLACE INTO DemoTable VALUES(11, 'John New');

सर्वोत्तम अभ्यास

  • व्यावसायिक कुंजी (ईमेल, यूज़रनेम, SKU) पर हमेशा UNIQUE कंस्ट्रेंट रखें
  • एप्लिकेशन लेवल पर भी डुप्लीकेट जांच करें (बेहतर UX के लिए)
  • कंस्ट्रेंट नाम सार्थक रखें (जैसे uk_users_email)
  1. - MySQL में TRUNCATE TABLE से ऑटो-इन्क्रीमेंट कॉलम रीसेट करें

    TRUNCATE TABLE टेबल की सभी पंक्तियाँ हटाता है और AUTO_INCREMENT काउंटर को शुरुआती मान (डिफ़ॉल्ट 1) पर रीसेट करता है। यह DELETE से तेज़ है और लॉग नहीं करता। टेबल बनाएं mysql> CREATE TABLE DemoTable1888 ( Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ); डेटा डालें mysql> INSERT INTO DemoTable

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

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

  1. - MySQL में INSERT से पहले ट्रिगर कैसे बनाएं?

    MySQL में BEFORE INSERT ट्रिगर किसी नई पंक्ति के इन्सर्ट होने से पहले स्वचालित रूप से निष्पादित होता है। इसका उपयोग डेटा वैलिडेशन, डिफ़ॉल्ट मान सेट करने, बिजनेस नियम लागू करने, या इन्सर्ट रोकने के लिए किया जाता है। सिंटैक्स DELIMITER // CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EA